Ensure lpush atomic
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/list/AbstractLPopIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/list/AbstractLPopIntegrationTest.java
index fd7979d..3457635 100755
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/list/AbstractLPopIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/list/AbstractLPopIntegrationTest.java
@@ -96,8 +96,8 @@
 
   @Test
   public void lpop_withConcurrentLPush_returnsCorrectValue() {
-    String[] valuesInitial = new String[] {"one", "two", "three"};
-    String[] valuesToAdd = new String[] {"pear", "apple", "plum", "orange", "peach"};
+    String[] valuesInitial = new String[] {"un", "deux", "troix"};
+    String[] valuesToAdd = new String[] {"plum", "peach", "orange"};
     jedis.lpush(KEY, valuesInitial);
 
     final AtomicReference<String> lpopReference = new AtomicReference<>();
@@ -106,9 +106,9 @@
         i -> lpopReference.set(jedis.lpop(KEY)))
             .runWithAction(() -> {
               assertThat(lpopReference).satisfiesAnyOf(
-                  lpopResult -> assertThat(lpopReference.get()).isEqualTo("peach"),
-                  lpopResult -> assertThat(lpopReference.get()).isEqualTo("three"),
-                  lpopResult -> assertThat(lpopResult.get()).isNull());
+                  lpopResult -> assertThat(lpopReference.get()).isEqualTo("orange"),
+                  lpopResult -> assertThat(lpopReference.get()).isEqualTo("troix"),
+                  lpopResult -> assertThat(lpopReference.get()).isNull());
               jedis.del(KEY);
               jedis.lpush(KEY, valuesInitial);
             });
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/list/AbstractLPushIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/list/AbstractLPushIntegrationTest.java
index f3ecf43..25959fd 100755
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/list/AbstractLPushIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/list/AbstractLPushIntegrationTest.java
@@ -95,8 +95,18 @@
   @Test
   public void lpush_addsElementsInCorrectOrder_givenMultipleElements() {
     jedis.lpush(KEY, "e1", "e2", "e3");
+    jedis.lpush(KEY, "e4", "e5", "e6");
 
     String result = jedis.lpop(KEY);
+    assertThat(result).isEqualTo("e6");
+
+    result = jedis.lpop(KEY);
+    assertThat(result).isEqualTo("e5");
+
+    result = jedis.lpop(KEY);
+    assertThat(result).isEqualTo("e4");
+
+    result = jedis.lpop(KEY);
     assertThat(result).isEqualTo("e3");
 
     result = jedis.lpop(KEY);
diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/RedisCommandType.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/RedisCommandType.java
index e5ea743..d67a7a1 100755
--- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/RedisCommandType.java
+++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/RedisCommandType.java
@@ -382,7 +382,8 @@
 
   LLEN(new LLenExecutor(), Category.LIST, SUPPORTED, new Parameter().exact(2).flags(READONLY, FAST)),
   LPOP(new LPopExecutor(), Category.LIST, SUPPORTED, new Parameter().exact(2).flags(WRITE, FAST)),
-  LPUSH(new LPushExecutor(), Category.LIST, SUPPORTED, new Parameter().min(3).flags(WRITE, DENYOOM, FAST)),
+  LPUSH(new LPushExecutor(), Category.LIST, SUPPORTED,
+      new Parameter().min(3).flags(WRITE, DENYOOM, FAST)),
 
   /********** Publish Subscribe **********/
 
diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisList.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisList.java
index 61f9b79..02928d0 100644
--- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisList.java
+++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisList.java
@@ -49,9 +49,6 @@
    * @return the number of elements actually added
    */
   public long lpush(List<byte[]> elementsToAdd, Region<RedisKey, RedisData> region, RedisKey key) {
-    // for (byte[] element : elementsToAdd) {
-    // elementPush(element);
-    // }
     elementsPush(elementsToAdd);
     storeChanges(region, key, new AddByteArrays(elementsToAdd));
     return elementList.size();
@@ -133,7 +130,9 @@
   }
 
   public synchronized void elementsPush(List<byte[]> elementsToAdd) {
-    elementList.addAll(0, elementsToAdd);
+    for (byte[] element : elementsToAdd) {
+      elementPush(element);
+    }
   }
 
   @Override