diff --git a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/solr-common-SqlMap.xml b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/solr-common-SqlMap.xml index a8815b2f0a..692528098b 100644 --- a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/solr-common-SqlMap.xml +++ b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/solr-common-SqlMap.xml @@ -50,13 +50,13 @@ = #{fromCommitTimeInclusive}]]> - = #{fromIdInclusive}]]> + and = #{fromIdInclusive}]]> - + and - + and order by acs.commit_time_ms ASC, acs.id ASC @@ -110,13 +110,13 @@ = #{fromCommitTimeInclusive}]]> - = #{fromIdInclusive}]]> + and = #{fromIdInclusive}]]> - + and - + and order by txn.commit_time_ms ASC, txn.id ASC @@ -153,10 +153,10 @@ - = #{fromNodeId}]]> + and = #{fromNodeId}]]> - + and and store.protocol = #{storeProtocol} diff --git a/source/java/org/alfresco/repo/solr/SOLRTrackingComponentTest.java b/source/java/org/alfresco/repo/solr/SOLRTrackingComponentTest.java index 6210a4dbe6..f8e670f127 100644 --- a/source/java/org/alfresco/repo/solr/SOLRTrackingComponentTest.java +++ b/source/java/org/alfresco/repo/solr/SOLRTrackingComponentTest.java @@ -110,6 +110,22 @@ public class SOLRTrackingComponentTest extends TestCase rootNodeRef = nodeService.getRootNode(storeRef); } + public void testAclChnageSetLimits() + { + List aclChangeSets = solrTrackingComponent.getAclChangeSets(null, null, null, null, 50); + + // First + Long first = aclChangeSets.get(0).getId(); + Long firstTime = aclChangeSets.get(1).getId(); + List testSets = solrTrackingComponent.getAclChangeSets(first, null, first, null, 50); + assertEquals(0, testSets.size()); + testSets = solrTrackingComponent.getAclChangeSets(first, firstTime, first+1, firstTime, 50); + assertEquals(0, testSets.size()); + testSets = solrTrackingComponent.getAclChangeSets(first, firstTime, first+1, firstTime+1, 50); + assertEquals(0, testSets.size()); + + } + public void testGetAcls_Simple() { List cs = solrTrackingComponent.getAclChangeSets(null, null, null, null, 50); @@ -148,16 +164,88 @@ public class SOLRTrackingComponentTest extends TestCase int[] updates = new int[] {1, 1}; int[] deletes = new int[] {0, 1}; - List txnIds = checkTransactions(txns, createdTransactions, updates, deletes); + List checkedTransactions = checkTransactions(txns, createdTransactions, updates, deletes); NodeParameters nodeParameters = new NodeParameters(); - nodeParameters.setTransactionIds(txnIds); + nodeParameters.setTransactionIds(getTransactionIds(checkedTransactions)); getNodes(nodeParameters, st); NodeMetaDataParameters nodeMetaDataParams = new NodeMetaDataParameters(); nodeMetaDataParams.setNodeIds(st.getNodeIds()); getNodeMetaData(nodeMetaDataParams, null, st); } + + /** + * @param checkedTransactions + * @return + */ + private List getTransactionIds(List checkedTransactions) + { + ArrayList txIds = new ArrayList(checkedTransactions.size()); + for(Transaction txn : checkedTransactions) + { + txIds.add(txn.getId()); + } + return txIds; + } + + public void testGetTransactionLimits() + { + long startTime = System.currentTimeMillis(); + + SOLRTest st = new SOLRTest3(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, "testGetNodeMetaData", true, true); + List createdTransactions = st.buildTransactions(); + + // All + + List txns = solrTrackingComponent.getTransactions(null, startTime, null, null, 50); + + int[] updates = new int[] {1, 1}; + int[] deletes = new int[] {0, 1}; + List checkedTransactions = checkTransactions(txns, createdTransactions, updates, deletes); + + Long first = checkedTransactions.get(0).getId(); + Long firstTime = checkedTransactions.get(0).getCommitTimeMs(); + Long last = checkedTransactions.get(1).getId(); + Long lastTime = checkedTransactions.get(1).getCommitTimeMs(); + + // First + + txns = solrTrackingComponent.getTransactions(first, null, first, null, 50); + assertEquals(0, txns.size()); + + txns = solrTrackingComponent.getTransactions(first, null, first+1, null, 50); + updates = new int[] {1}; + deletes = new int[] {0}; + List createdTransactionFirst = new ArrayList(1); + createdTransactionFirst.add(createdTransactions.get(0)); + checkTransactions(txns, createdTransactionFirst, updates, deletes); + + txns = solrTrackingComponent.getTransactions(first, firstTime, first+1, firstTime+1, 50); + checkTransactions(txns, createdTransactionFirst, updates, deletes); + + txns = solrTrackingComponent.getTransactions(first, firstTime-1, first+1, firstTime, 50); + assertEquals(0, txns.size()); + + // Last + + txns = solrTrackingComponent.getTransactions(last, null, last, null, 50); + assertEquals(0, txns.size()); + + txns = solrTrackingComponent.getTransactions(last, null, last+1, null, 50); + updates = new int[] {1}; + deletes = new int[] {1}; + List createdTransactionLast = new ArrayList(1); + createdTransactionLast.add(createdTransactions.get(1)); + checkTransactions(txns, createdTransactionLast, updates, deletes); + + + txns = solrTrackingComponent.getTransactions(last, lastTime, last+1, lastTime+1, 50); + checkTransactions(txns, createdTransactionLast, updates, deletes); + + txns = solrTrackingComponent.getTransactions(last, lastTime-1, last+1, lastTime, 50); + assertEquals(0, txns.size()); + } public void testGetNodeMetaDataExludesResidualProperties() { @@ -170,10 +258,10 @@ public class SOLRTrackingComponentTest extends TestCase int[] updates = new int[] {2}; int[] deletes = new int[] {0}; - List txnIds = checkTransactions(txns, createdTransactions, updates, deletes); + List checkedTransactions = checkTransactions(txns, createdTransactions, updates, deletes); NodeParameters nodeParameters = new NodeParameters(); - nodeParameters.setTransactionIds(txnIds); + nodeParameters.setTransactionIds(getTransactionIds(checkedTransactions)); getNodes(nodeParameters, st); @@ -194,10 +282,10 @@ public class SOLRTrackingComponentTest extends TestCase int[] updates = new int[] {100}; int[] deletes = new int[] {0}; - List txnIds = checkTransactions(txns, createdTransactions, updates, deletes); + List checkedTransactions = checkTransactions(txns, createdTransactions, updates, deletes); NodeParameters nodeParameters = new NodeParameters(); - nodeParameters.setTransactionIds(txnIds); + nodeParameters.setTransactionIds(getTransactionIds(checkedTransactions)); getNodes(nodeParameters, st); // assertEquals("Unxpected number of nodes", 3, nodeQueryCallback.getSuccessCount()); @@ -223,10 +311,10 @@ public class SOLRTrackingComponentTest extends TestCase int[] updates = new int[] {2001}; int[] deletes = new int[] {0}; - List txnIds = checkTransactions(txns, createdTransactions, updates, deletes); + List checkedTransactions = checkTransactions(txns, createdTransactions, updates, deletes); NodeParameters nodeParameters = new NodeParameters(); - nodeParameters.setTransactionIds(txnIds); + nodeParameters.setTransactionIds(getTransactionIds(checkedTransactions)); getNodes(nodeParameters, st); // make sure caches are warm - time last call @@ -280,10 +368,10 @@ public class SOLRTrackingComponentTest extends TestCase int[] updates = new int[] {2001}; int[] deletes = new int[] {0}; - List txnIds = checkTransactions(txns, createdTransactions, updates, deletes); + List checkedTransactions = checkTransactions(txns, createdTransactions, updates, deletes); NodeParameters nodeParameters = new NodeParameters(); - nodeParameters.setTransactionIds(txnIds); + nodeParameters.setTransactionIds(getTransactionIds(checkedTransactions)); getNodes(nodeParameters, st); // clear out node caches @@ -310,10 +398,10 @@ public class SOLRTrackingComponentTest extends TestCase int[] updates = new int[] {11}; int[] deletes = new int[] {0}; - List txnIds = checkTransactions(txns, createdTransactions, updates, deletes); + List checkedTransactions = checkTransactions(txns, createdTransactions, updates, deletes); NodeParameters nodeParameters = new NodeParameters(); - nodeParameters.setTransactionIds(txnIds); + nodeParameters.setTransactionIds(getTransactionIds(checkedTransactions)); getNodes(nodeParameters, st); NodeMetaDataParameters nodeMetaDataParams = new NodeMetaDataParameters(); @@ -332,10 +420,10 @@ public class SOLRTrackingComponentTest extends TestCase int[] updates = new int[] {1, 1}; int[] deletes = new int[] {0, 1}; - List txnIds = checkTransactions(txns, createdTransactions, updates, deletes); + List checkedTransactions = checkTransactions(txns, createdTransactions, updates, deletes); NodeParameters nodeParameters = new NodeParameters(); - nodeParameters.setTransactionIds(txnIds); + nodeParameters.setTransactionIds(getTransactionIds(checkedTransactions)); getNodes(nodeParameters, st); NodeMetaDataParameters nodeMetaDataParams = new NodeMetaDataParameters(); @@ -548,7 +636,7 @@ public class SOLRTrackingComponentTest extends TestCase } } - private List checkTransactions(List txns, List createdTransaction, int[] updates, int[] deletes) + private List checkTransactions(List txns, List createdTransaction, int[] updates, int[] deletes) { ArrayList matchedTransactions = new ArrayList(); HashSet toMatch = new HashSet(); @@ -566,18 +654,15 @@ public class SOLRTrackingComponentTest extends TestCase assertEquals("Number of transactions is incorrect", createdTransaction.size(), matchedTransactions.size()); - List txnIds = new ArrayList(matchedTransactions.size()); int i = 0; for(Transaction txn : matchedTransactions) { assertEquals("Number of deletes is incorrect", deletes[i], txn.getDeletes()); assertEquals("Number of updates is incorrect", updates[i], txn.getUpdates()); i++; - - txnIds.add(txn.getId()); } - return txnIds; + return matchedTransactions; } private void getNodes(NodeParameters nodeParameters, SOLRTest bt)