You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ud...@apache.org on 2017/02/10 21:34:20 UTC
[17/21] geode git commit: GEODE-2449: Moved Redis out of core with
minimal Extension work added
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/RedisDataType.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/RedisDataType.java b/geode-core/src/main/java/org/apache/geode/redis/internal/RedisDataType.java
deleted file mode 100755
index 63a15df..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/RedisDataType.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal;
-
-import org.apache.geode.cache.Region;
-import org.apache.geode.redis.GeodeRedisServer;
-
-/**
- * The RedisDataType enum contains the choices to which every {@link Region} on the server must be.
- * There is only one instance of {@link #REDIS_STRING} and {@link #REDIS_PROTECTED} defined by
- * {@link GeodeRedisServer#STRING_REGION} and {@link GeodeRedisServer#REDIS_META_DATA_REGION}
- * respectively.
- * <p>
- * The data types are:
- * <li>{@link RedisDataType#REDIS_STRING}</li>
- * <li>{@link RedisDataType#REDIS_HASH}</li>
- * <li>{@link RedisDataType#REDIS_LIST}</li>
- * <li>{@link RedisDataType#REDIS_SET}</li>
- * <li>{@link RedisDataType#REDIS_SORTEDSET}</li>
- * <li>{@link RedisDataType#REDIS_PROTECTED}</li>
- *
- */
-public enum RedisDataType {
- /**
- * Strings Regions
- */
- REDIS_STRING {
- @Override
- public String toString() {
- return "string";
- }
- },
-
- /**
- * Hashes Regions
- */
- REDIS_HASH {
- @Override
- public String toString() {
- return "hash";
- }
- },
-
- /**
- * Lists Regions
- */
- REDIS_LIST {
- @Override
- public String toString() {
- return "list";
- }
- },
-
- /**
- * Sets Regions
- */
- REDIS_SET {
- @Override
- public String toString() {
- return "set";
- }
- },
-
- /**
- * SortedSets Regions
- */
- REDIS_SORTEDSET {
- @Override
- public String toString() {
- return "zset";
- }
- },
-
- /**
- * HyperLogLog Regions
- */
- REDIS_HLL {
- @Override
- public String toString() {
- return "hyperloglog";
- }
- },
-
- /**
- * Regions protected from overwrite or deletion
- */
- REDIS_PROTECTED {
- @Override
- public String toString() {
- return "protected";
- }
- },
-
- /**
- * None
- */
- NONE {
- @Override
- public String toString() {
- return "none";
- }
- };
-
-};
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/RedisDataTypeMismatchException.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/RedisDataTypeMismatchException.java b/geode-core/src/main/java/org/apache/geode/redis/internal/RedisDataTypeMismatchException.java
deleted file mode 100755
index 727412b..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/RedisDataTypeMismatchException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal;
-
-/**
- * This exception is for the case that a client attempts to operate on a data structure of one
- * {@link RedisDataType} with a command that is of another type
- *
- *
- */
-public class RedisDataTypeMismatchException extends RuntimeException {
-
- private static final long serialVersionUID = -2451663685348513870L;
-
- public RedisDataTypeMismatchException() {
- super();
- }
-
- public RedisDataTypeMismatchException(String message) {
- super(message);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/RegionCreationException.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/RegionCreationException.java b/geode-core/src/main/java/org/apache/geode/redis/internal/RegionCreationException.java
deleted file mode 100644
index afc009e..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/RegionCreationException.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal;
-
-/**
- * This exception is used when an error happens while creating a
- * {@link org.apache.geode.cache.Region} globally
- *
- *
- */
-public class RegionCreationException extends RuntimeException {
-
- public RegionCreationException() {}
-
- public RegionCreationException(String err) {
- super(err);
- }
-
- public RegionCreationException(String err, Throwable cause) {
- super(err, cause);
- }
-
- private static final long serialVersionUID = 8416820139078312997L;
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/RegionProvider.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/RegionProvider.java b/geode-core/src/main/java/org/apache/geode/redis/internal/RegionProvider.java
deleted file mode 100644
index 5994d7d..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/RegionProvider.java
+++ /dev/null
@@ -1,567 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal;
-
-import java.io.Closeable;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
-import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.CacheTransactionManager;
-import org.apache.geode.cache.Region;
-import org.apache.geode.cache.RegionShortcut;
-import org.apache.geode.cache.TransactionId;
-import org.apache.geode.cache.query.IndexExistsException;
-import org.apache.geode.cache.query.IndexInvalidException;
-import org.apache.geode.cache.query.IndexNameConflictException;
-import org.apache.geode.cache.query.Query;
-import org.apache.geode.cache.query.QueryInvalidException;
-import org.apache.geode.cache.query.QueryService;
-import org.apache.geode.cache.query.RegionNotFoundException;
-import org.apache.geode.internal.cache.GemFireCacheImpl;
-import org.apache.geode.redis.internal.executor.ExpirationExecutor;
-import org.apache.geode.redis.internal.executor.ListQuery;
-import org.apache.geode.redis.internal.executor.SortedSetQuery;
-import org.apache.geode.internal.hll.HyperLogLogPlus;
-import org.apache.geode.management.cli.Result;
-import org.apache.geode.management.cli.Result.Status;
-import org.apache.geode.management.internal.cli.commands.CreateAlterDestroyRegionCommands;
-import org.apache.geode.redis.GeodeRedisServer;
-
-/**
- * This class stands between {@link Executor} and {@link Cache#getRegion(String)}. This is needed
- * because some keys for Redis represented as a {@link Region} in {@link GeodeRedisServer} come with
- * additional state. Therefore getting, creating, or destroying a {@link Region} needs to be
- * synchronized, which is done away with and abstracted by this class.
- *
- *
- */
-public class RegionProvider implements Closeable {
-
- private final ConcurrentHashMap<ByteArrayWrapper, Region<?, ?>> regions;
-
- /**
- * This is the Redis meta data {@link Region} that holds the {@link RedisDataType} information for
- * all Regions created. The mapping is a {@link String} key which is the name of the
- * {@link Region} created to hold the data to the RedisDataType it contains.
- */
- private final Region<String, RedisDataType> redisMetaRegion;
-
- /**
- * This is the {@link RedisDataType#REDIS_STRING} {@link Region}. This is the Region that stores
- * all string contents
- */
- private final Region<ByteArrayWrapper, ByteArrayWrapper> stringsRegion;
-
- /**
- * This is the {@link RedisDataType#REDIS_HLL} {@link Region}. This is the Region that stores all
- * HyperLogLog contents
- */
- private final Region<ByteArrayWrapper, HyperLogLogPlus> hLLRegion;
-
- private final Cache cache;
- private final QueryService queryService;
- private final ConcurrentMap<ByteArrayWrapper, Map<Enum<?>, Query>> preparedQueries =
- new ConcurrentHashMap<ByteArrayWrapper, Map<Enum<?>, Query>>();
- private final ConcurrentMap<ByteArrayWrapper, ScheduledFuture<?>> expirationsMap;
- private final ScheduledExecutorService expirationExecutor;
- private final RegionShortcut defaultRegionType;
- private static final CreateAlterDestroyRegionCommands cliCmds =
- new CreateAlterDestroyRegionCommands();
- private final ConcurrentHashMap<String, Lock> locks;
-
- public RegionProvider(Region<ByteArrayWrapper, ByteArrayWrapper> stringsRegion,
- Region<ByteArrayWrapper, HyperLogLogPlus> hLLRegion,
- Region<String, RedisDataType> redisMetaRegion,
- ConcurrentMap<ByteArrayWrapper, ScheduledFuture<?>> expirationsMap,
- ScheduledExecutorService expirationExecutor, RegionShortcut defaultShortcut) {
- if (stringsRegion == null || hLLRegion == null || redisMetaRegion == null)
- throw new NullPointerException();
- this.regions = new ConcurrentHashMap<ByteArrayWrapper, Region<?, ?>>();
- this.stringsRegion = stringsRegion;
- this.hLLRegion = hLLRegion;
- this.redisMetaRegion = redisMetaRegion;
- this.cache = GemFireCacheImpl.getInstance();
- this.queryService = cache.getQueryService();
- this.expirationsMap = expirationsMap;
- this.expirationExecutor = expirationExecutor;
- this.defaultRegionType = defaultShortcut;
- this.locks = new ConcurrentHashMap<String, Lock>();
- }
-
- public boolean existsKey(ByteArrayWrapper key) {
- return this.redisMetaRegion.containsKey(key.toString());
- }
-
- public Set<String> metaKeySet() {
- return this.redisMetaRegion.keySet();
- }
-
- public Set<Map.Entry<String, RedisDataType>> metaEntrySet() {
- return this.redisMetaRegion.entrySet();
- }
-
- public int getMetaSize() {
- return this.redisMetaRegion.size() - RedisConstants.NUM_DEFAULT_KEYS;
- }
-
- private boolean metaRemoveEntry(ByteArrayWrapper key) {
- return this.redisMetaRegion.remove(key.toString()) != null;
- }
-
- public RedisDataType metaPutIfAbsent(ByteArrayWrapper key, RedisDataType value) {
- return this.redisMetaRegion.putIfAbsent(key.toString(), value);
- }
-
- public RedisDataType metaPut(ByteArrayWrapper key, RedisDataType value) {
- return this.redisMetaRegion.put(key.toString(), value);
- }
-
- public RedisDataType metaGet(ByteArrayWrapper key) {
- return this.redisMetaRegion.get(key.toString());
- }
-
- public Region<?, ?> getRegion(ByteArrayWrapper key) {
- return this.regions.get(key);
- }
-
- public void removeRegionReferenceLocally(ByteArrayWrapper key, RedisDataType type) {
- Lock lock = this.locks.get(key.toString());
- boolean locked = false;
- try {
- locked = lock.tryLock();
- // If we cannot get the lock we ignore this remote event, this key has local event
- // that started independently, ignore this event to prevent deadlock
- if (locked) {
- cancelKeyExpiration(key);
- removeRegionState(key, type);
- }
- } finally {
- if (locked) {
- lock.unlock();
- }
- }
- }
-
- public boolean removeKey(ByteArrayWrapper key) {
- RedisDataType type = getRedisDataType(key);
- return removeKey(key, type);
- }
-
- public boolean removeKey(ByteArrayWrapper key, RedisDataType type) {
- return removeKey(key, type, true);
- }
-
- public boolean removeKey(ByteArrayWrapper key, RedisDataType type, boolean cancelExpiration) {
- if (type == null || type == RedisDataType.REDIS_PROTECTED)
- return false;
- Lock lock = this.locks.get(key.toString());
- try {
- if (lock != null) {// Strings/hlls will not have locks
- lock.lock();
- }
- metaRemoveEntry(key);
- try {
- if (type == RedisDataType.REDIS_STRING) {
- return this.stringsRegion.remove(key) != null;
- } else if (type == RedisDataType.REDIS_HLL) {
- return this.hLLRegion.remove(key) != null;
- } else {
- return destroyRegion(key, type);
- }
- } catch (Exception exc) {
- return false;
- } finally {
- if (cancelExpiration)
- cancelKeyExpiration(key);
- else
- removeKeyExpiration(key);
- if (lock != null)
- this.locks.remove(key.toString());
- }
- } finally {
- if (lock != null) {
- lock.unlock();
- }
- }
- }
-
- public Region<?, ?> getOrCreateRegion(ByteArrayWrapper key, RedisDataType type,
- ExecutionHandlerContext context) {
- return getOrCreateRegion0(key, type, context, true);
- }
-
- public void createRemoteRegionReferenceLocally(ByteArrayWrapper key, RedisDataType type) {
- if (type == null || type == RedisDataType.REDIS_STRING || type == RedisDataType.REDIS_HLL)
- return;
- Region<?, ?> r = this.regions.get(key);
- if (r != null)
- return;
- if (!this.regions.contains(key)) {
- String stringKey = key.toString();
- Lock lock = this.locks.get(stringKey);
- if (lock == null) {
- this.locks.putIfAbsent(stringKey, new ReentrantLock());
- lock = this.locks.get(stringKey);
- }
- boolean locked = false;
- try {
- locked = lock.tryLock();
- // If we cannot get the lock then this remote event may have been initialized
- // independently on this machine, so if we wait on the lock it is more than
- // likely we will deadlock just to do the same task. This event can be ignored
- if (locked) {
- r = cache.getRegion(key.toString());
- // If r is null, this implies that we are after a create/destroy
- // simply ignore. Calls to getRegion or getOrCreate will work correctly
- if (r == null)
- return;
-
- if (type == RedisDataType.REDIS_LIST) {
- doInitializeList(key, r);
- } else if (type == RedisDataType.REDIS_SORTEDSET) {
- try {
- doInitializeSortedSet(key, r);
- } catch (RegionNotFoundException | IndexInvalidException e) {
- // ignore
- }
- }
- this.regions.put(key, r);
- }
- } finally {
- if (locked) {
- lock.unlock();
- }
- }
- }
- }
-
- private Region<?, ?> getOrCreateRegion0(ByteArrayWrapper key, RedisDataType type,
- ExecutionHandlerContext context, boolean addToMeta) {
- checkDataType(key, type);
- Region<?, ?> r = this.regions.get(key);
- if (r != null && r.isDestroyed()) {
- removeKey(key, type);
- r = null;
- }
- if (r == null) {
- String stringKey = key.toString();
- Lock lock = this.locks.get(stringKey);
- if (lock == null) {
- this.locks.putIfAbsent(stringKey, new ReentrantLock());
- lock = this.locks.get(stringKey);
- }
-
- try {
- lock.lock();
- r = regions.get(key);
- if (r == null) {
- boolean hasTransaction = context != null && context.hasTransaction(); // Can create
- // without context
- CacheTransactionManager txm = null;
- TransactionId transactionId = null;
- try {
- if (hasTransaction) {
- txm = cache.getCacheTransactionManager();
- transactionId = txm.suspend();
- }
- Exception concurrentCreateDestroyException = null;
- do {
- concurrentCreateDestroyException = null;
- r = createRegionGlobally(stringKey);
- try {
- if (type == RedisDataType.REDIS_LIST) {
- doInitializeList(key, r);
- } else if (type == RedisDataType.REDIS_SORTEDSET) {
- try {
- doInitializeSortedSet(key, r);
- } catch (RegionNotFoundException | IndexInvalidException e) {
- concurrentCreateDestroyException = e;
- }
- }
- } catch (QueryInvalidException e) {
- if (e.getCause() instanceof RegionNotFoundException) {
- concurrentCreateDestroyException = e;
- }
- }
- } while (concurrentCreateDestroyException != null);
- this.regions.put(key, r);
- if (addToMeta) {
- RedisDataType existingType = metaPutIfAbsent(key, type);
- if (existingType != null && existingType != type)
- throw new RedisDataTypeMismatchException(
- "The key name \"" + key + "\" is already used by a " + existingType.toString());
- }
- } finally {
- if (hasTransaction)
- txm.resume(transactionId);
- }
- }
- } finally {
- lock.unlock();
- }
- }
- return r;
- }
-
- /**
- * SYNCHRONIZE EXTERNALLY OF this.locks.get(key.toString())!!!!!
- *
- * @param key Key of region to destroy
- * @param type Type of region to destroyu
- * @return Flag if destroyed
- */
- private boolean destroyRegion(ByteArrayWrapper key, RedisDataType type) {
- Region<?, ?> r = this.regions.get(key);
- if (r != null) {
- try {
- r.destroyRegion();
- } catch (Exception e) {
- return false;
- } finally {
- removeRegionState(key, type);
- }
- }
- return true;
- }
-
- /**
- * Do not call this method if you are not synchronized on the lock associated with this key
- *
- * @param key Key of region to remove
- * @param type Type of key to remove all state
- */
- private void removeRegionState(ByteArrayWrapper key, RedisDataType type) {
- this.preparedQueries.remove(key);
- this.regions.remove(key);
- }
-
- private void doInitializeSortedSet(ByteArrayWrapper key, Region<?, ?> r)
- throws RegionNotFoundException, IndexInvalidException {
- String fullpath = r.getFullPath();
- try {
- queryService.createIndex("scoreIndex", "entry.value.score",
- r.getFullPath() + ".entrySet entry");
- queryService.createIndex("scoreIndex2", "value.score", r.getFullPath() + ".values value");
- } catch (IndexNameConflictException | IndexExistsException | UnsupportedOperationException e) {
- // ignore, these indexes already exist or unsupported but make sure prepared queries are made
- }
- HashMap<Enum<?>, Query> queryList = new HashMap<Enum<?>, Query>();
- for (SortedSetQuery lq : SortedSetQuery.values()) {
- String queryString = lq.getQueryString(fullpath);
- Query query = this.queryService.newQuery(queryString);
- queryList.put(lq, query);
- }
- this.preparedQueries.put(key, queryList);
- }
-
- private void doInitializeList(ByteArrayWrapper key, Region r) {
- r.put("head", Integer.valueOf(0));
- r.put("tail", Integer.valueOf(0));
- String fullpath = r.getFullPath();
- HashMap<Enum<?>, Query> queryList = new HashMap<Enum<?>, Query>();
- for (ListQuery lq : ListQuery.values()) {
- String queryString = lq.getQueryString(fullpath);
- Query query = this.queryService.newQuery(queryString);
- queryList.put(lq, query);
- }
- this.preparedQueries.put(key, queryList);
- }
-
- /**
- * This method creates a Region globally with the given name. If there is an error in the
- * creation, a runtime exception will be thrown.
- *
- * @param key Name of Region to create
- * @return Region Region created globally
- */
- private Region<?, ?> createRegionGlobally(String key) {
- Region<?, ?> r = null;
- r = cache.getRegion(key);
- if (r != null)
- return r;
- do {
- Result result = cliCmds.createRegion(key, defaultRegionType, null, null, true, null, null,
- null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null, null);
- r = cache.getRegion(key);
- if (result.getStatus() == Status.ERROR && r == null) {
- String err = "";
- while (result.hasNextLine())
- err += result.nextLine();
- throw new RegionCreationException(err);
- }
- } while (r == null); // The region can be null in the case that it is concurrently destroyed by
- // a remote even triggered internally by Geode
- return r;
- }
-
- public Query getQuery(ByteArrayWrapper key, Enum<?> query) {
- return this.preparedQueries.get(key).get(query);
- /*
- * if (query instanceof ListQuery) { return
- * this.queryService.newQuery(((ListQuery)query).getQueryString(this.regions.get(key).
- * getFullPath())); } else { return
- * this.queryService.newQuery(((SortedSetQuery)query).getQueryString(this.regions.get(key).
- * getFullPath())); }
- */
- }
-
- /**
- * Checks if the given key is associated with the passed data type. If there is a mismatch, a
- * {@link RuntimeException} is thrown
- *
- * @param key Key to check
- * @param type Type to check to
- */
- protected void checkDataType(ByteArrayWrapper key, RedisDataType type) {
- RedisDataType currentType = redisMetaRegion.get(key.toString());
- if (currentType == null)
- return;
- if (currentType == RedisDataType.REDIS_PROTECTED)
- throw new RedisDataTypeMismatchException("The key name \"" + key + "\" is protected");
- if (currentType != type)
- throw new RedisDataTypeMismatchException(
- "The key name \"" + key + "\" is already used by a " + currentType.toString());
- }
-
- public boolean regionExists(ByteArrayWrapper key) {
- return this.regions.containsKey(key);
- }
-
- public Region<ByteArrayWrapper, ByteArrayWrapper> getStringsRegion() {
- return this.stringsRegion;
- }
-
- public Region<ByteArrayWrapper, HyperLogLogPlus> gethLLRegion() {
- return this.hLLRegion;
- }
-
- private RedisDataType getRedisDataType(String key) {
- return this.redisMetaRegion.get(key);
- }
-
- public RedisDataType getRedisDataType(ByteArrayWrapper key) {
- return getRedisDataType(key.toString());
- }
-
- /**
- * Sets the expiration for a key. The setting and modifying of a key expiration can only be set by
- * a delay, which means that both expiring after a time and at a time can be done but the delay to
- * expire at a time must be calculated before these calls. It is also important to note that the
- * delay is always handled in milliseconds
- *
- * @param key The key to set the expiration for
- * @param delay The delay in milliseconds of the expiration
- * @return True is expiration set, false otherwise
- */
- public final boolean setExpiration(ByteArrayWrapper key, long delay) {
- RedisDataType type = getRedisDataType(key);
- if (type == null)
- return false;
- ScheduledFuture<?> future = this.expirationExecutor
- .schedule(new ExpirationExecutor(key, type, this), delay, TimeUnit.MILLISECONDS);
- this.expirationsMap.put(key, future);
- return true;
- }
-
- /**
- * Modifies an expiration on a key
- *
- * @param key String key to modify expiration on
- * @param delay Delay in milliseconds to reset the expiration to
- * @return True if reset, false if not
- */
- public final boolean modifyExpiration(ByteArrayWrapper key, long delay) {
- /*
- * Attempt to cancel future task
- */
- boolean canceled = cancelKeyExpiration(key);
-
- if (!canceled)
- return false;
-
- RedisDataType type = getRedisDataType(key);
- if (type == null)
- return false;
-
- ScheduledFuture<?> future = this.expirationExecutor
- .schedule(new ExpirationExecutor(key, type, this), delay, TimeUnit.MILLISECONDS);
- this.expirationsMap.put(key, future);
- return true;
- }
-
- /**
- * Removes an expiration from a key
- *
- * @param key Key
- * @return True is expiration cancelled on the key, false otherwise
- */
- public final boolean cancelKeyExpiration(ByteArrayWrapper key) {
- ScheduledFuture<?> future = expirationsMap.remove(key);
- if (future == null)
- return false;
- return future.cancel(false);
- }
-
- private boolean removeKeyExpiration(ByteArrayWrapper key) {
- return expirationsMap.remove(key) != null;
- }
-
- /**
- * Check method if key has expiration
- *
- * @param key Key
- * @return True if key has expiration, false otherwise
- */
- public boolean hasExpiration(ByteArrayWrapper key) {
- return this.expirationsMap.containsKey(key);
- }
-
- /**
- * Get remaining expiration time
- *
- * @param key Key
- * @return Remaining time in milliseconds or 0 if no delay or key doesn't exist
- */
- public final long getExpirationDelayMillis(ByteArrayWrapper key) {
- ScheduledFuture<?> future = this.expirationsMap.get(key);
- return future != null ? future.getDelay(TimeUnit.MILLISECONDS) : 0L;
- }
-
- @Override
- public void close() {
- this.preparedQueries.clear();
- }
-
- public String dumpRegionsCache() {
- StringBuilder builder = new StringBuilder();
- for (Entry<ByteArrayWrapper, Region<?, ?>> e : this.regions.entrySet()) {
- builder.append(e.getKey() + " --> {" + e.getValue() + "}\n");
- }
- return builder.toString();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/AbstractExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/AbstractExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/AbstractExecutor.java
deleted file mode 100755
index c9d47ab..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/AbstractExecutor.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import org.apache.geode.cache.Region;
-import org.apache.geode.cache.query.Query;
-import org.apache.geode.redis.internal.ByteArrayWrapper;
-import org.apache.geode.redis.internal.ExecutionHandlerContext;
-import org.apache.geode.redis.internal.Executor;
-import org.apache.geode.redis.internal.RedisDataType;
-import org.apache.geode.redis.internal.RedisDataTypeMismatchException;
-import org.apache.geode.redis.internal.RegionProvider;
-import org.apache.geode.redis.GeodeRedisServer;
-
-/**
- * The AbstractExecutor is the base of all {@link Executor} types for the {@link GeodeRedisServer}.
- *
- *
- */
-public abstract class AbstractExecutor implements Executor {
-
- /**
- * Number of Regions used by GeodeRedisServer internally
- */
- public static final int NUM_DEFAULT_REGIONS = 3;
-
- /**
- * Max length of a list
- */
- protected static final Integer INFINITY_LIMIT = Integer.MAX_VALUE;
-
- /**
- * Constant of number of milliseconds in a second
- */
- protected static final int millisInSecond = 1000;
-
- /**
- * Getter method for a {@link Region} in the case that a Region should be created if one with the
- * given name does not exist. Before getting or creating a Region, a check is first done to make
- * sure the desired key doesn't already exist with a different {@link RedisDataType}. If there is
- * a data type mismatch this method will throw a {@link RuntimeException}.
- *
- * ********************** IMPORTANT NOTE ********************************************** This
- * method will not fail in returning a Region unless an internal error occurs, so if a Region is
- * destroyed right after it is created, it will attempt to retry until a reference to that Region
- * is obtained
- * *************************************************************************************
- *
- * @param context Client client
- * @param key String key of desired key
- * @param type Type of data type desired
- * @return Region with name key
- */
- protected Region<?, ?> getOrCreateRegion(ExecutionHandlerContext context, ByteArrayWrapper key,
- RedisDataType type) {
- return context.getRegionProvider().getOrCreateRegion(key, type, context);
- }
-
- /**
- * Checks if the given key is associated with the passed data type. If there is a mismatch, a
- * {@link RuntimeException} is thrown
- *
- * @param key Key to check
- * @param type Type to check to
- * @param context context
- */
- protected void checkDataType(ByteArrayWrapper key, RedisDataType type,
- ExecutionHandlerContext context) {
- RedisDataType currentType = context.getRegionProvider().getRedisDataType(key);
- if (currentType == null)
- return;
- if (currentType == RedisDataType.REDIS_PROTECTED)
- throw new RedisDataTypeMismatchException("The key name \"" + key + "\" is protected");
- if (currentType != type)
- throw new RedisDataTypeMismatchException(
- "The key name \"" + key + "\" is already used by a " + currentType.toString());
- }
-
- protected Query getQuery(ByteArrayWrapper key, Enum<?> type, ExecutionHandlerContext context) {
- return context.getRegionProvider().getQuery(key, type);
- }
-
- protected boolean removeEntry(ByteArrayWrapper key, RedisDataType type,
- ExecutionHandlerContext context) {
- if (type == null || type == RedisDataType.REDIS_PROTECTED)
- return false;
- RegionProvider rC = context.getRegionProvider();
- return rC.removeKey(key, type);
- }
-
- protected int getBoundedStartIndex(int index, int size) {
- if (size < 0)
- throw new IllegalArgumentException("Size < 0, really?");
- if (index >= 0)
- return Math.min(index, size);
- else
- return Math.max(index + size, 0);
- }
-
- protected int getBoundedEndIndex(int index, int size) {
- if (size < 0)
- throw new IllegalArgumentException("Size < 0, really?");
- if (index >= 0)
- return Math.min(index, size);
- else
- return Math.max(index + size, -1);
- }
-
- protected long getBoundedStartIndex(long index, long size) {
- if (size < 0L)
- throw new IllegalArgumentException("Size < 0, really?");
- if (index >= 0L)
- return Math.min(index, size);
- else
- return Math.max(index + size, 0);
- }
-
- protected long getBoundedEndIndex(long index, long size) {
- if (size < 0L)
- throw new IllegalArgumentException("Size < 0, really?");
- if (index >= 0L)
- return Math.min(index, size);
- else
- return Math.max(index + size, -1);
- }
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/AbstractScanExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/AbstractScanExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/AbstractScanExecutor.java
deleted file mode 100755
index 0eb6dca..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/AbstractScanExecutor.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.regex.Pattern;
-
-import org.apache.geode.redis.internal.org.apache.hadoop.fs.GlobPattern;
-
-
-public abstract class AbstractScanExecutor extends AbstractExecutor {
-
- protected final String ERROR_CURSOR = "Invalid cursor";
-
- protected final String ERROR_COUNT = "Count must be numeric and positive";
-
- protected final String ERROR_INVALID_CURSOR =
- "Cursor is invalid, dataset may have been altered if this is cursor from a previous scan";
-
- protected final int DEFUALT_COUNT = 10;
-
- protected abstract List<?> getIteration(Collection<?> list, Pattern matchPatter, int count,
- int cursor);
-
- /**
- * @param pattern A glob pattern.
- * @return A regex pattern to recognize the given glob pattern.
- */
- protected final Pattern convertGlobToRegex(String pattern) {
- if (pattern == null)
- return null;
- return GlobPattern.compile(pattern);
- }
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/AuthExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/AuthExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/AuthExecutor.java
deleted file mode 100644
index 9d318a4..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/AuthExecutor.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.geode.redis.internal.Coder;
-import org.apache.geode.redis.internal.Command;
-import org.apache.geode.redis.internal.ExecutionHandlerContext;
-import org.apache.geode.redis.internal.Executor;
-import org.apache.geode.redis.internal.RedisConstants;
-import org.apache.geode.redis.internal.RedisConstants.ArityDef;
-
-public class AuthExecutor implements Executor {
-
- @Override
- public void executeCommand(Command command, ExecutionHandlerContext context) {
- List<byte[]> commandElems = command.getProcessedCommand();
-
- if (commandElems.size() < 2) {
- command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.AUTH));
- return;
- }
- byte[] pwd = context.getAuthPwd();
- if (pwd == null) {
- command.setResponse(
- Coder.getErrorResponse(context.getByteBufAllocator(), RedisConstants.ERROR_NO_PASS));
- return;
- }
- boolean correct = Arrays.equals(commandElems.get(1), pwd);
-
- if (correct) {
- context.setAuthenticationVerified();
- command.setResponse(Coder.getSimpleStringResponse(context.getByteBufAllocator(), "OK"));
- } else {
- command.setResponse(
- Coder.getErrorResponse(context.getByteBufAllocator(), RedisConstants.ERROR_INVALID_PWD));
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/DBSizeExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/DBSizeExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/DBSizeExecutor.java
deleted file mode 100755
index 0a121cc..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/DBSizeExecutor.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import org.apache.geode.redis.internal.Coder;
-import org.apache.geode.redis.internal.Command;
-import org.apache.geode.redis.internal.ExecutionHandlerContext;
-
-public class DBSizeExecutor extends AbstractExecutor {
-
- @Override
- public void executeCommand(Command command, ExecutionHandlerContext context) {
- int size = context.getRegionProvider().getMetaSize();
- command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), size));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/DelExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/DelExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/DelExecutor.java
deleted file mode 100755
index e0db651..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/DelExecutor.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import java.util.List;
-
-import org.apache.geode.cache.UnsupportedOperationInTransactionException;
-import org.apache.geode.redis.internal.ByteArrayWrapper;
-import org.apache.geode.redis.internal.Coder;
-import org.apache.geode.redis.internal.Command;
-import org.apache.geode.redis.internal.ExecutionHandlerContext;
-import org.apache.geode.redis.internal.RedisConstants.ArityDef;
-import org.apache.geode.redis.internal.RedisDataType;
-
-public class DelExecutor extends AbstractExecutor {
-
- @Override
- public void executeCommand(Command command, ExecutionHandlerContext context) {
- if (context.hasTransaction())
- throw new UnsupportedOperationInTransactionException();
-
- List<byte[]> commandElems = command.getProcessedCommand();
- if (commandElems.size() < 2) {
- command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.DEL));
- return;
- }
-
- int numRemoved = 0;
-
- for (int i = 1; i < commandElems.size(); i++) {
- byte[] byteKey = commandElems.get(i);
- ByteArrayWrapper key = new ByteArrayWrapper(byteKey);
- RedisDataType type = context.getRegionProvider().getRedisDataType(key);
- if (removeEntry(key, type, context))
- numRemoved++;
- }
-
- command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), numRemoved));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/EchoExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/EchoExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/EchoExecutor.java
deleted file mode 100755
index 407e653..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/EchoExecutor.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import java.util.List;
-
-import org.apache.geode.redis.internal.Coder;
-import org.apache.geode.redis.internal.Command;
-import org.apache.geode.redis.internal.ExecutionHandlerContext;
-import org.apache.geode.redis.internal.RedisConstants.ArityDef;
-
-public class EchoExecutor extends AbstractExecutor {
-
- @Override
- public void executeCommand(Command command, ExecutionHandlerContext context) {
- List<byte[]> commandElems = command.getProcessedCommand();
- if (commandElems.size() < 2) {
- command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.ECHO));
- return;
- }
-
- byte[] echoMessage = commandElems.get(1);
- command.setResponse(Coder.getBulkStringResponse(context.getByteBufAllocator(), echoMessage));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ExistsExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ExistsExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ExistsExecutor.java
deleted file mode 100755
index 96611dc..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ExistsExecutor.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import java.util.List;
-
-import org.apache.geode.redis.internal.ByteArrayWrapper;
-import org.apache.geode.redis.internal.Coder;
-import org.apache.geode.redis.internal.Command;
-import org.apache.geode.redis.internal.ExecutionHandlerContext;
-import org.apache.geode.redis.internal.RedisConstants.ArityDef;
-
-public class ExistsExecutor extends AbstractExecutor {
- private final int EXISTS = 1;
-
- private final int NOT_EXISTS = 0;
-
- @Override
- public void executeCommand(Command command, ExecutionHandlerContext context) {
- List<byte[]> commandElems = command.getProcessedCommand();
- if (commandElems.size() < 2) {
- command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.EXISTS));
- return;
- }
-
- ByteArrayWrapper key = command.getKey();
- boolean exists = context.getRegionProvider().existsKey(key);
-
- if (exists)
- command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), EXISTS));
- else
- command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), NOT_EXISTS));
-
- }
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ExpirationExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ExpirationExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ExpirationExecutor.java
deleted file mode 100755
index 86503f1..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ExpirationExecutor.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import org.apache.geode.redis.internal.ByteArrayWrapper;
-import org.apache.geode.redis.internal.RedisDataType;
-import org.apache.geode.redis.internal.RegionProvider;
-
-
-public class ExpirationExecutor implements Runnable {
- private final ByteArrayWrapper key;
- private final RedisDataType type;
- private final RegionProvider rC;
-
- public ExpirationExecutor(ByteArrayWrapper k, RedisDataType type, RegionProvider rC) {
- this.key = k;
- this.type = type;
- this.rC = rC;
- }
-
- @Override
- public void run() {
- rC.removeKey(key, type, false);
- }
-
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ExpireAtExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ExpireAtExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ExpireAtExecutor.java
deleted file mode 100755
index 0962a7d..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ExpireAtExecutor.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import java.util.List;
-
-import org.apache.geode.redis.internal.ByteArrayWrapper;
-import org.apache.geode.redis.internal.Coder;
-import org.apache.geode.redis.internal.Command;
-import org.apache.geode.redis.internal.ExecutionHandlerContext;
-import org.apache.geode.redis.internal.Extendable;
-import org.apache.geode.redis.internal.RedisConstants.ArityDef;
-import org.apache.geode.redis.internal.RegionProvider;
-
-public class ExpireAtExecutor extends AbstractExecutor implements Extendable {
-
- private final String ERROR_TIMESTAMP_NOT_USABLE = "The timestamp specified must be numeric";
-
- private final int TIMESTAMP_INDEX = 2;
-
- private final int SET = 1;
-
- private final int NOT_SET = 0;
-
- @Override
- public void executeCommand(Command command, ExecutionHandlerContext context) {
- List<byte[]> commandElems = command.getProcessedCommand();
-
- if (commandElems.size() < 3) {
- command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), getArgsError()));
- return;
- }
- RegionProvider rC = context.getRegionProvider();
- ByteArrayWrapper wKey = command.getKey();
-
- byte[] timestampByteArray = commandElems.get(TIMESTAMP_INDEX);
- long timestamp;
- try {
- timestamp = Coder.bytesToLong(timestampByteArray);
- } catch (NumberFormatException e) {
- command.setResponse(
- Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_TIMESTAMP_NOT_USABLE));
- return;
- }
-
- if (!timeUnitMillis())
- timestamp = timestamp * millisInSecond;
-
- long currentTimeMillis = System.currentTimeMillis();
-
- if (timestamp <= currentTimeMillis) {
- command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), NOT_SET));
- return;
- }
-
- long delayMillis = timestamp - currentTimeMillis;
-
- boolean expirationSet = false;
-
- if (rC.hasExpiration(wKey))
- expirationSet = rC.modifyExpiration(wKey, delayMillis);
- else
- expirationSet = rC.setExpiration(wKey, delayMillis);
-
- if (expirationSet)
- command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), SET));
- else
- command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), NOT_SET));
- }
-
- protected boolean timeUnitMillis() {
- return false;
- }
-
- @Override
- public String getArgsError() {
- return ArityDef.EXPIREAT;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ExpireExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ExpireExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ExpireExecutor.java
deleted file mode 100755
index d986826..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ExpireExecutor.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import java.util.List;
-
-import org.apache.geode.redis.internal.ByteArrayWrapper;
-import org.apache.geode.redis.internal.Coder;
-import org.apache.geode.redis.internal.Command;
-import org.apache.geode.redis.internal.ExecutionHandlerContext;
-import org.apache.geode.redis.internal.Extendable;
-import org.apache.geode.redis.internal.RedisConstants.ArityDef;
-import org.apache.geode.redis.internal.RegionProvider;
-
-public class ExpireExecutor extends AbstractExecutor implements Extendable {
-
- private final String ERROR_SECONDS_NOT_USABLE = "The number of seconds specified must be numeric";
-
- private final int SECONDS_INDEX = 2;
-
- private final int SET = 1;
-
- private final int NOT_SET = 0;
-
- @Override
- public void executeCommand(Command command, ExecutionHandlerContext context) {
- List<byte[]> commandElems = command.getProcessedCommand();
-
- if (commandElems.size() < 3) {
- command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), getArgsError()));
- return;
- }
- ByteArrayWrapper wKey = command.getKey();
- RegionProvider rC = context.getRegionProvider();
- byte[] delayByteArray = commandElems.get(SECONDS_INDEX);
- long delay;
- try {
- delay = Coder.bytesToLong(delayByteArray);
- } catch (NumberFormatException e) {
- command.setResponse(
- Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_SECONDS_NOT_USABLE));
- return;
- }
-
- if (delay <= 0) {
- command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), NOT_SET));
- return;
- }
-
- // If time unit given is not in millis convert to millis
- if (!timeUnitMillis())
- delay = delay * millisInSecond;
-
- boolean expirationSet = false;
-
- if (rC.hasExpiration(wKey))
- expirationSet = rC.modifyExpiration(wKey, delay);
- else
- expirationSet = rC.setExpiration(wKey, delay);
-
-
- if (expirationSet)
- command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), SET));
- else
- command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), NOT_SET));
- }
-
- /*
- * Overridden by PExpire
- */
- protected boolean timeUnitMillis() {
- return false;
- }
-
- @Override
- public String getArgsError() {
- return ArityDef.EXPIRE;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/FlushAllExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/FlushAllExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/FlushAllExecutor.java
deleted file mode 100755
index f855166..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/FlushAllExecutor.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import java.util.Map.Entry;
-
-import org.apache.geode.cache.EntryDestroyedException;
-import org.apache.geode.cache.UnsupportedOperationInTransactionException;
-import org.apache.geode.redis.internal.Coder;
-import org.apache.geode.redis.internal.Command;
-import org.apache.geode.redis.internal.ExecutionHandlerContext;
-import org.apache.geode.redis.internal.RedisDataType;
-
-public class FlushAllExecutor extends AbstractExecutor {
-
- @Override
- public void executeCommand(Command command, ExecutionHandlerContext context) {
- if (context.hasTransaction())
- throw new UnsupportedOperationInTransactionException();
-
- for (Entry<String, RedisDataType> e : context.getRegionProvider().metaEntrySet()) {
- try {
- String skey = e.getKey();
- RedisDataType type = e.getValue();
- removeEntry(Coder.stringToByteWrapper(skey), type, context);
- } catch (EntryDestroyedException e1) {
- continue;
- }
-
- }
-
- command.setResponse(Coder.getSimpleStringResponse(context.getByteBufAllocator(), "OK"));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/KeysExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/KeysExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/KeysExecutor.java
deleted file mode 100755
index 9398d87..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/KeysExecutor.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-import org.apache.geode.redis.internal.Coder;
-import org.apache.geode.redis.internal.Command;
-import org.apache.geode.redis.internal.ExecutionHandlerContext;
-import org.apache.geode.redis.internal.RedisConstants;
-import org.apache.geode.redis.internal.RedisConstants.ArityDef;
-import org.apache.geode.redis.internal.org.apache.hadoop.fs.GlobPattern;
-import org.apache.geode.redis.GeodeRedisServer;
-
-public class KeysExecutor extends AbstractExecutor {
-
- @Override
- public void executeCommand(Command command, ExecutionHandlerContext context) {
- List<byte[]> commandElems = command.getProcessedCommand();
- if (commandElems.size() < 2) {
- command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.KEYS));
- return;
- }
-
- String glob = Coder.bytesToString(commandElems.get(1));
- Set<String> allKeys = context.getRegionProvider().metaKeySet();
- List<String> matchingKeys = new ArrayList<String>();
-
- Pattern pattern;
- try {
- pattern = GlobPattern.compile(glob);
- } catch (PatternSyntaxException e) {
- command.setResponse(
- Coder.getErrorResponse(context.getByteBufAllocator(), RedisConstants.ERROR_ILLEGAL_GLOB));
- return;
- }
-
- for (String key : allKeys) {
- if (!(key.equals(GeodeRedisServer.REDIS_META_DATA_REGION)
- || key.equals(GeodeRedisServer.STRING_REGION) || key.equals(GeodeRedisServer.HLL_REGION))
- && pattern.matcher(key).matches())
- matchingKeys.add(key);
- }
-
- if (matchingKeys.isEmpty())
- command.setResponse(Coder.getEmptyArrayResponse(context.getByteBufAllocator()));
- else
- command.setResponse(
- Coder.getBulkStringArrayResponse(context.getByteBufAllocator(), matchingKeys));
-
-
- }
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ListQuery.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ListQuery.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ListQuery.java
deleted file mode 100644
index dcd062a..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ListQuery.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-public enum ListQuery {
-
- LINDEX {
- public String getQueryString(String fullpath) {
- return "SELECT DISTINCT entry.key, entry.value FROM " + fullpath
- + ".entrySet entry WHERE key != 'head' AND key != 'tail' ORDER BY key asc LIMIT $1";
- }
- },
- LRANGE {
- public String getQueryString(String fullpath) {
- return "SELECT DISTINCT entry.key, entry.value FROM " + fullpath
- + ".entrySet entry WHERE key != 'head' AND key != 'tail' ORDER BY key asc LIMIT $1";
- }
- },
- LREMG {
- public String getQueryString(String fullpath) {
- return "SELECT DISTINCT entry.key, entry.value FROM " + fullpath
- + ".entrySet entry WHERE value = $1 AND key != 'head' AND key != 'tail' ORDER BY key asc LIMIT $2";
- }
- },
- LREML {
- public String getQueryString(String fullpath) {
- return "SELECT DISTINCT entry.key, entry.value FROM " + fullpath
- + ".entrySet entry WHERE value = $1 AND key != 'head' AND key != 'tail' ORDER BY key desc LIMIT $2";
- }
- },
- LREME {
- public String getQueryString(String fullpath) {
- return "SELECT DISTINCT entry.key, entry.value FROM " + fullpath
- + ".entrySet entry WHERE value = $1 ORDER BY key asc";
- }
- },
- LSET {
- public String getQueryString(String fullpath) {
- return "SELECT DISTINCT * FROM " + fullpath
- + ".keySet key WHERE key != 'head' AND key != 'tail' ORDER BY key asc LIMIT $1";
- }
- },
- LTRIM {
- public String getQueryString(String fullpath) {
- return "SELECT DISTINCT * FROM " + fullpath
- + ".keySet key WHERE key != 'head' AND key != 'tail' ORDER BY key asc LIMIT $1";
- }
- };
-
- public abstract String getQueryString(String fullpath);
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PExpireAtExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PExpireAtExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PExpireAtExecutor.java
deleted file mode 100755
index fa68d13..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PExpireAtExecutor.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import org.apache.geode.redis.internal.RedisConstants.ArityDef;
-
-public class PExpireAtExecutor extends ExpireAtExecutor {
-
- @Override
- protected boolean timeUnitMillis() {
- return true;
- }
-
- @Override
- public String getArgsError() {
- return ArityDef.PEXPIREAT;
- }
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PExpireExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PExpireExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PExpireExecutor.java
deleted file mode 100755
index 3581d5d..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PExpireExecutor.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import org.apache.geode.redis.internal.RedisConstants.ArityDef;
-
-public class PExpireExecutor extends ExpireExecutor {
-
- @Override
- protected boolean timeUnitMillis() {
- return true;
- }
-
- @Override
- public String getArgsError() {
- return ArityDef.PEXPIRE;
- }
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PTTLExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PTTLExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PTTLExecutor.java
deleted file mode 100755
index 9e15d56..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PTTLExecutor.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import org.apache.geode.redis.internal.RedisConstants.ArityDef;
-
-public class PTTLExecutor extends TTLExecutor {
-
-
- @Override
- protected boolean timeUnitMillis() {
- return true;
- }
-
- @Override
- public String getArgsError() {
- return ArityDef.PTTL;
- }
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PersistExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PersistExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PersistExecutor.java
deleted file mode 100755
index db4d19a..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PersistExecutor.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import java.util.List;
-
-import org.apache.geode.redis.internal.ByteArrayWrapper;
-import org.apache.geode.redis.internal.Coder;
-import org.apache.geode.redis.internal.Command;
-import org.apache.geode.redis.internal.ExecutionHandlerContext;
-import org.apache.geode.redis.internal.RedisConstants.ArityDef;
-
-public class PersistExecutor extends AbstractExecutor {
-
- private final int TIMEOUT_REMOVED = 1;
-
- private final int KEY_NOT_EXIST_OR_NO_TIMEOUT = 0;
-
- @Override
- public void executeCommand(Command command, ExecutionHandlerContext context) {
- List<byte[]> commandElems = command.getProcessedCommand();
-
- if (commandElems.size() < 2) {
- command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.PERSIST));
- return;
- }
-
- ByteArrayWrapper key = command.getKey();
-
- boolean canceled = context.getRegionProvider().cancelKeyExpiration(key);
-
- if (canceled)
- command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), TIMEOUT_REMOVED));
- else
- command.setResponse(
- Coder.getIntegerResponse(context.getByteBufAllocator(), KEY_NOT_EXIST_OR_NO_TIMEOUT));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PingExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PingExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PingExecutor.java
deleted file mode 100755
index 4561b5c..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/PingExecutor.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import org.apache.geode.redis.internal.Coder;
-import org.apache.geode.redis.internal.Command;
-import org.apache.geode.redis.internal.ExecutionHandlerContext;
-
-public class PingExecutor extends AbstractExecutor {
-
- private final String PING_RESPONSE = "PONG";
-
- @Override
- public void executeCommand(Command command, ExecutionHandlerContext context) {
- command
- .setResponse(Coder.getSimpleStringResponse(context.getByteBufAllocator(), PING_RESPONSE));
- }
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/QuitExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/QuitExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/QuitExecutor.java
deleted file mode 100755
index 84ad241..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/QuitExecutor.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import org.apache.geode.redis.internal.Coder;
-import org.apache.geode.redis.internal.Command;
-import org.apache.geode.redis.internal.ExecutionHandlerContext;
-import org.apache.geode.redis.internal.RedisConstants;
-
-public class QuitExecutor extends AbstractExecutor {
-
- @Override
- public void executeCommand(Command command, ExecutionHandlerContext context) {
- command.setResponse(
- Coder.getSimpleStringResponse(context.getByteBufAllocator(), RedisConstants.QUIT_RESPONSE));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ScanExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ScanExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ScanExecutor.java
deleted file mode 100755
index 5e625cf..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ScanExecutor.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-import org.apache.geode.redis.internal.Coder;
-import org.apache.geode.redis.internal.Command;
-import org.apache.geode.redis.internal.ExecutionHandlerContext;
-import org.apache.geode.redis.internal.RedisConstants;
-import org.apache.geode.redis.internal.RedisConstants.ArityDef;
-import org.apache.geode.redis.GeodeRedisServer;
-
-public class ScanExecutor extends AbstractScanExecutor {
-
- @Override
- public void executeCommand(Command command, ExecutionHandlerContext context) {
- List<byte[]> commandElems = command.getProcessedCommand();
-
- if (commandElems.size() < 2) {
- command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.SCAN));
- return;
- }
-
- String cursorString = command.getStringKey();
- int cursor = 0;
- Pattern matchPattern = null;
- String globMatchString = null;
- int count = DEFUALT_COUNT;
- try {
- cursor = Integer.parseInt(cursorString);
- } catch (NumberFormatException e) {
- command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_CURSOR));
- return;
- }
- if (cursor < 0) {
- command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_CURSOR));
- return;
- }
-
- if (commandElems.size() > 3) {
- try {
- byte[] bytes = commandElems.get(2);
- String tmp = Coder.bytesToString(bytes);
- if (tmp.equalsIgnoreCase("MATCH")) {
- bytes = commandElems.get(3);
- globMatchString = Coder.bytesToString(bytes);
- } else if (tmp.equalsIgnoreCase("COUNT")) {
- bytes = commandElems.get(3);
- count = Coder.bytesToInt(bytes);
- }
- } catch (NumberFormatException e) {
- command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_COUNT));
- return;
- }
- }
-
- if (commandElems.size() > 5) {
- try {
- byte[] bytes = commandElems.get(4);
- String tmp = Coder.bytesToString(bytes);
- if (tmp.equalsIgnoreCase("COUNT")) {
- bytes = commandElems.get(5);
- count = Coder.bytesToInt(bytes);
- }
- } catch (NumberFormatException e) {
- command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_COUNT));
- return;
- }
- }
-
- if (count < 0) {
- command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_COUNT));
- return;
- }
-
- try {
- matchPattern = convertGlobToRegex(globMatchString);
- } catch (PatternSyntaxException e) {
- command.setResponse(
- Coder.getErrorResponse(context.getByteBufAllocator(), RedisConstants.ERROR_ILLEGAL_GLOB));
- return;
- }
-
- @SuppressWarnings("unchecked")
- List<String> returnList = (List<String>) getIteration(context.getRegionProvider().metaKeySet(),
- matchPattern, count, cursor);
-
- command.setResponse(Coder.getScanResponse(context.getByteBufAllocator(), returnList));
- }
-
- @SuppressWarnings("unchecked")
- @Override
- protected List<?> getIteration(Collection<?> list, Pattern matchPattern, int count, int cursor) {
- List<String> returnList = new ArrayList<String>();
- int size = list.size();
- int beforeCursor = 0;
- int numElements = 0;
- int i = -1;
- for (String key : (Collection<String>) list) {
- if (key.equals(GeodeRedisServer.REDIS_META_DATA_REGION)
- || key.equals(GeodeRedisServer.STRING_REGION) || key.equals(GeodeRedisServer.HLL_REGION))
- continue;
- i++;
- if (beforeCursor < cursor) {
- beforeCursor++;
- continue;
- } else if (numElements < count) {
- if (matchPattern != null) {
- if (matchPattern.matcher(key).matches()) {
- returnList.add(key);
- numElements++;
- }
- } else {
- returnList.add(key);
- numElements++;
- }
- } else
- break;
- }
-
- if (i == size - (NUM_DEFAULT_REGIONS + 1))
- returnList.add(0, String.valueOf(0));
- else
- returnList.add(0, String.valueOf(i));
- return returnList;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ShutDownExecutor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ShutDownExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ShutDownExecutor.java
deleted file mode 100755
index 0392095..0000000
--- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/ShutDownExecutor.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.redis.internal.executor;
-
-import org.apache.geode.redis.internal.Command;
-import org.apache.geode.redis.internal.ExecutionHandlerContext;
-
-public class ShutDownExecutor extends AbstractExecutor {
-
- @Override
- public void executeCommand(Command command, ExecutionHandlerContext context) {}
-
-}