You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2019/05/01 01:17:19 UTC

[qpid-broker-j] 02/03: QPID-8303: [Broker-J][JDBC Message Store] Batch delete fails when deleting exactly 1000 messages

This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch 7.1.x
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit 9214901fe41d8ff8138477031b7811d7d3bb4963
Author: overmeulen <ov...@murex.com>
AuthorDate: Mon Apr 29 14:41:17 2019 +0200

    QPID-8303: [Broker-J][JDBC Message Store] Batch delete fails when deleting exactly 1000 messages
    
    This closes #28
    
    (cherry picked from commit 3d5bacb6698e501c86083870edc2f9d86caa427b)
---
 .../apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java   | 8 ++------
 .../org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java   | 7 +++++++
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java
index d7a391b..2dc992f 100644
--- a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java
+++ b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java
@@ -44,6 +44,7 @@ import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
+import com.google.common.collect.Lists;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.SettableFuture;
@@ -472,13 +473,8 @@ public abstract class AbstractJDBCMessageStore implements MessageStore
             {
                 try
                 {
-                    for (int i = 0; i <= messageIds.size() / IN_CLAUSE_MAX_SIZE; i++)
+                    for (List<Long> boundMessageIds : Lists.partition(messageIds, IN_CLAUSE_MAX_SIZE))
                     {
-                        List<Long> boundMessageIds = messageIds.stream()
-                                                               .skip(i * IN_CLAUSE_MAX_SIZE)
-                                                               .limit(IN_CLAUSE_MAX_SIZE)
-                                                               .collect(Collectors.toList());
-
                         removeMessagesFromDatabase(conn, boundMessageIds);
                     }
                 }
diff --git a/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java b/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java
index f8c016d..d19c034 100644
--- a/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java
+++ b/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java
@@ -37,6 +37,7 @@ import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -184,6 +185,12 @@ public class JDBCMessageStoreTest extends MessageStoreTestCase
         GenericJDBCMessageStore store = spy((GenericJDBCMessageStore) getStore());
         when(store.newConnection()).thenReturn(mock(Connection.class, Mockito.RETURNS_MOCKS));
 
+        store.removeMessages(LongStream.rangeClosed(1,1000).boxed().collect(Collectors.toList()));
+
+        verify(store).removeMessagesFromDatabase(any(Connection.class), any(List.class));
+
+        Mockito.reset(store);
+
         store.removeMessages(LongStream.rangeClosed(1,2001).boxed().collect(Collectors.toList()));
 
         verify(store).removeMessagesFromDatabase(any(Connection.class), eq(LongStream.rangeClosed(1,1000).boxed().collect(Collectors.toList())));


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org