[ 
https://issues.apache.org/jira/browse/GEODE-8711?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17234732#comment-17234732
 ] 

ASF GitHub Bot commented on GEODE-8711:
---------------------------------------

sabbey37 commented on a change in pull request #5749:
URL: https://github.com/apache/geode/pull/5749#discussion_r526168133



##########
File path: 
geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/AbstractSlowlogIntegrationTest.java
##########
@@ -0,0 +1,146 @@
+/*
+ * 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.server;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.util.List;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.Protocol;
+import redis.clients.jedis.util.Slowlog;
+
+import org.apache.geode.test.awaitility.GeodeAwaitility;
+import org.apache.geode.test.dunit.rules.RedisPortSupplier;
+
+public abstract class AbstractSlowlogIntegrationTest implements 
RedisPortSupplier {
+
+  private Jedis jedis;
+  private static final int REDIS_CLIENT_TIMEOUT =
+      Math.toIntExact(GeodeAwaitility.getTimeout().toMillis());
+
+  @Before
+  public void setUp() {
+    jedis = new Jedis("localhost", getPort(), REDIS_CLIENT_TIMEOUT);
+  }
+
+  @After
+  public void tearDown() {
+    jedis.close();
+  }
+
+  abstract int getExposedPort();
+
+  @Test
+  public void shouldReturnEmptyArray_whenGetSubcommandSpecified() {
+    List<Slowlog> actualResult = jedis.slowlogGet();
+
+    assertThat(actualResult.size()).isEqualTo(0);

Review comment:
       We could use `assertThat(actualResult).isEmpty()` here (and for the ones 
below) .  This might be preferable because if the result is not empty, the 
error message will display the contents of the array rather than just the 
length.  Sorry I didn't notice this in the first review.

##########
File path: 
geode-redis/src/main/java/org/apache/geode/redis/internal/ParameterRequirements/SlowlogParameterRequirements.java
##########
@@ -0,0 +1,62 @@
+/*
+ * 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.ParameterRequirements;
+
+import static org.apache.geode.redis.internal.RedisConstants.ERROR_NOT_INTEGER;
+import static 
org.apache.geode.redis.internal.RedisConstants.ERROR_UNKNOWN_SLOWLOG_SUBCOMMAND;
+
+import org.apache.geode.redis.internal.netty.Command;
+import org.apache.geode.redis.internal.netty.ExecutionHandlerContext;
+
+public class SlowlogParameterRequirements implements ParameterRequirements {
+  @Override
+  public void checkParameters(Command command, ExecutionHandlerContext 
context) {
+    int numberOfArguments = command.getProcessedCommand().size();
+
+    if (numberOfArguments < 2) {
+      throw new 
RedisParametersMismatchException(command.wrongNumberOfArgumentsErrorMessage());
+    } else if (numberOfArguments == 2) {
+      confirmKnownSubcommands(command);
+    } else if (numberOfArguments == 3) {
+      confirmArgumentsToGetSubcommand(command);
+    } else if (numberOfArguments > 3) {

Review comment:
       I think LGTM is suggesting that this could just be an `else`, instead of 
an `else if`

##########
File path: geode-redis/README.md
##########
@@ -200,16 +200,16 @@ start server \
 |                      | SINTER                                                
| CLUSTER INFO                          |
 |                      | SINTERSTORE                                           
| CLUSTER KEYSLOT                       |
 |                      | SISMEMBER                                             
| CLUSTER MEET                          |
-|                      | SMOVE                                                 
| CLUSTER MYID                          |
-|                      | SPOP                                                  
| CLUSTER NODES                         |
-|                      | SRANDMEMBER                                           
| CLUSTER REPLICAS                      |
-|                      | SSCAN                                                 
| CLUSTER REPLICATE                     |
-|                      | STRLEN                                                
| CLUSTER RESET                         |
-|                      | SUNION                                                
| CLUSTER SAVECONFIG                |
-|                      | SUNIONSTORE                                           
| CLUSTER SET-CONFIG-EPOCH          |
-|                      | TIME                                                  
| CLUSTER SETSLOT                       |
-|                      | UNLINK [1]                                            
| CLUSTER SLAVES                        |
-|                      |                                                       
| CLUSTER SLOTS                         |
+|                      | SLOWLOG                                               
| CLUSTER MYID                          |

Review comment:
       Good call adding this to the README! We also need to add it to the list 
of unsupported commands in this file: `redis_api_for_geode.html.md.erb`

##########
File path: 
geode-redis/src/main/java/org/apache/geode/redis/internal/ParameterRequirements/SlowlogParameterRequirements.java
##########
@@ -0,0 +1,62 @@
+/*
+ * 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.ParameterRequirements;
+
+import static org.apache.geode.redis.internal.RedisConstants.ERROR_NOT_INTEGER;
+import static 
org.apache.geode.redis.internal.RedisConstants.ERROR_UNKNOWN_SLOWLOG_SUBCOMMAND;
+
+import org.apache.geode.redis.internal.netty.Command;
+import org.apache.geode.redis.internal.netty.ExecutionHandlerContext;
+
+public class SlowlogParameterRequirements implements ParameterRequirements {
+  @Override
+  public void checkParameters(Command command, ExecutionHandlerContext 
context) {
+    int numberOfArguments = command.getProcessedCommand().size();
+
+    if (numberOfArguments < 2) {
+      throw new 
RedisParametersMismatchException(command.wrongNumberOfArgumentsErrorMessage());
+    } else if (numberOfArguments == 2) {
+      confirmKnownSubcommands(command);
+    } else if (numberOfArguments == 3) {
+      confirmArgumentsToGetSubcommand(command);
+    } else if (numberOfArguments > 3) {
+      throw new RedisParametersMismatchException(
+          String.format(ERROR_UNKNOWN_SLOWLOG_SUBCOMMAND, 
command.getStringKey()));
+    }
+  }
+
+  private void confirmKnownSubcommands(Command command) {
+    if (!command.getStringKey().toLowerCase().equals("reset") &&
+        !command.getStringKey().toLowerCase().equals("len") &&
+        !command.getStringKey().toLowerCase().equals("get")) {
+      throw new RedisParametersMismatchException(
+          String.format(ERROR_UNKNOWN_SLOWLOG_SUBCOMMAND, 
command.getStringKey()));
+    }
+  }
+
+  private void confirmArgumentsToGetSubcommand(Command command) {
+    if (!command.getStringKey().toLowerCase().equals("get")) {
+      throw new RedisParametersMismatchException(
+          String.format(ERROR_UNKNOWN_SLOWLOG_SUBCOMMAND, 
command.getStringKey()));
+    }
+    try {
+      Integer.parseInt(new String(command.getProcessedCommand().get(2)));

Review comment:
       Looks like this is one of those situations where Redis uses a long 
instead of an integer. We could also add a test for this.

##########
File path: 
geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/server/SlowlogNativeRedisAcceptanceTest.java
##########
@@ -0,0 +1,36 @@
+/*
+ * 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.server;
+
+import org.junit.ClassRule;
+
+import org.apache.geode.NativeRedisTestRule;
+
+public class SlowlogNativeRedisAcceptanceTest extends 
AbstractSlowlogIntegrationTest {
+
+  @ClassRule
+  public static NativeRedisTestRule redis = new NativeRedisTestRule();
+
+  @Override
+  public int getPort() {
+    return redis.getPort();
+  }
+
+  @Override
+  int getExposedPort() {
+    return redis.getExposedPort();
+  }

Review comment:
       You can delete this since the method is never used.

##########
File path: 
geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/AbstractSlowlogIntegrationTest.java
##########
@@ -0,0 +1,146 @@
+/*
+ * 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.server;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.util.List;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.Protocol;
+import redis.clients.jedis.util.Slowlog;
+
+import org.apache.geode.test.awaitility.GeodeAwaitility;
+import org.apache.geode.test.dunit.rules.RedisPortSupplier;
+
+public abstract class AbstractSlowlogIntegrationTest implements 
RedisPortSupplier {
+
+  private Jedis jedis;
+  private static final int REDIS_CLIENT_TIMEOUT =
+      Math.toIntExact(GeodeAwaitility.getTimeout().toMillis());
+
+  @Before
+  public void setUp() {
+    jedis = new Jedis("localhost", getPort(), REDIS_CLIENT_TIMEOUT);
+  }
+
+  @After
+  public void tearDown() {
+    jedis.close();
+  }
+
+  abstract int getExposedPort();

Review comment:
       This method is never used.  Sorry I didn't notice this in the first 
review.

##########
File path: 
geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/SlowlogIntegrationTest.java
##########
@@ -0,0 +1,39 @@
+/*
+ * 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.server;
+
+import static org.apache.geode.distributed.ConfigurationProperties.LOG_LEVEL;
+
+import org.junit.ClassRule;
+
+import org.apache.geode.redis.GeodeRedisServerRule;
+
+public class SlowlogIntegrationTest extends AbstractSlowlogIntegrationTest {
+
+  @ClassRule
+  public static GeodeRedisServerRule server = new GeodeRedisServerRule()
+      .withProperty(LOG_LEVEL, "info");
+
+  @Override
+  public int getPort() {
+    return server.getPort();
+  }
+
+  @Override
+  public int getExposedPort() {
+    return getPort();
+  }

Review comment:
       You can delete this since the method is never used.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> Enable SLOWLOG command to support Redis monitoring tools
> --------------------------------------------------------
>
>                 Key: GEODE-8711
>                 URL: https://issues.apache.org/jira/browse/GEODE-8711
>             Project: Geode
>          Issue Type: Improvement
>          Components: redis
>    Affects Versions: 1.14.0
>            Reporter: Raymond Ingles
>            Priority: Major
>              Labels: pull-request-available
>
> The Redis SLOWLOG command tracks slow-executing commands. This will implement 
> a placeholder to prevent errors in tools like Datadog or Redis Insights.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to