ALF-11546 Tracking queries on alf_transaction table do not have an upper bound

- Part 2 - refactor API + collateral damage
- Fix tracking tests to cope with the presence of background transactions - should fix Oracle build and other intermittent build failures

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@32824 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Andrew Hind
2011-12-16 19:35:21 +00:00
parent aac8f44c59
commit d7f79daba2
8 changed files with 367 additions and 244 deletions

View File

@@ -52,6 +52,12 @@
<if test="fromIdInclusive != null"> <if test="fromIdInclusive != null">
<![CDATA[and acs.id >= #{fromIdInclusive}]]> <![CDATA[and acs.id >= #{fromIdInclusive}]]>
</if> </if>
<if test="toCommitTimeExclusive != null">
<![CDATA[acs.commit_time_ms < #{toCommitTimeExclusive}]]>
</if>
<if test="toIdExclusive != null">
<![CDATA[and acs.id < #{toIdExclusive}]]>
</if>
</where> </where>
order by acs.commit_time_ms ASC, acs.id ASC order by acs.commit_time_ms ASC, acs.id ASC
</select> </select>
@@ -106,6 +112,12 @@
<if test="fromIdInclusive != null"> <if test="fromIdInclusive != null">
<![CDATA[and txn.id >= #{fromIdInclusive}]]> <![CDATA[and txn.id >= #{fromIdInclusive}]]>
</if> </if>
<if test="toCommitTimeExclusive != null">
<![CDATA[txn.commit_time_ms < #{toCommitTimeExclusive}]]>
</if>
<if test="toIdExclusive != null">
<![CDATA[and txn.id < #{toIdExclusive}]]>
</if>
</where> </where>
order by txn.commit_time_ms ASC, txn.id ASC order by txn.commit_time_ms ASC, txn.id ASC
</select> </select>

View File

@@ -38,10 +38,12 @@ public interface SOLRDAO
* *
* @param minAclChangeSetId minimum ACL changeset ID - (inclusive and optional) * @param minAclChangeSetId minimum ACL changeset ID - (inclusive and optional)
* @param fromCommitTime minimum ACL commit time - (inclusive and optional) * @param fromCommitTime minimum ACL commit time - (inclusive and optional)
* @param maxAclChangeSetId maximum ACL changeset ID - (exclusive and optional)
* @param toCommitTime maximum ACL commit time - (exclusive and optional)
* @param maxResults limit the results (must be greater than zero and less than MAX) * @param maxResults limit the results (must be greater than zero and less than MAX)
* @return list of ACL changesets (no details) * @return list of ACL changesets (no details)
*/ */
public List<AclChangeSet> getAclChangeSets(Long minAclChangeSetId, Long fromCommitTime, int maxResults); public List<AclChangeSet> getAclChangeSets(Long minAclChangeSetId, Long fromCommitTime, Long maxAclChangeSetId, Long toCommitTime, int maxResults);
/** /**
* Get the ACLs (no rollup count) for the given ACL ChangeSets * Get the ACLs (no rollup count) for the given ACL ChangeSets
@@ -58,10 +60,12 @@ public interface SOLRDAO
* *
* @param minTxnId greater than or equal to minTxnId * @param minTxnId greater than or equal to minTxnId
* @param fromCommitTime greater than or equal to transaction commit time * @param fromCommitTime greater than or equal to transaction commit time
* @param maxTxnId less than maxTxnId
* @param toCommitTime less than toCommitTime
* @param maxResults limit the results. 0 or Integer.MAX_VALUE does not limit the results * @param maxResults limit the results. 0 or Integer.MAX_VALUE does not limit the results
* @return list of transactions * @return list of transactions
*/ */
public List<Transaction> getTransactions(Long minTxnId, Long fromCommitTime, int maxResults); public List<Transaction> getTransactions(Long minTxnId, Long fromCommitTime, Long maxTxnId, Long toCommitTime, int maxResults);
/** /**
* Get the nodes satisfying the constraints in nodeParameters * Get the nodes satisfying the constraints in nodeParameters

View File

@@ -64,7 +64,7 @@ public class SOLRDAOTest extends TestCase
try try
{ {
solrDAO.getAclChangeSets(null, startTime, 0); solrDAO.getAclChangeSets(null, startTime, null, null, 0);
fail("Must have result limit"); fail("Must have result limit");
} }
catch (IllegalArgumentException e) catch (IllegalArgumentException e)
@@ -76,13 +76,13 @@ public class SOLRDAOTest extends TestCase
public void testQueryChangeSets_Time() public void testQueryChangeSets_Time()
{ {
long startTime = System.currentTimeMillis() + (5 * 60000L); // The future long startTime = System.currentTimeMillis() + (5 * 60000L); // The future
List<AclChangeSet> results = solrDAO.getAclChangeSets(null, startTime, 50); List<AclChangeSet> results = solrDAO.getAclChangeSets(null, startTime, null, null, 50);
assertTrue("ChangeSet count not limited", results.size() == 0); assertTrue("ChangeSet count not limited", results.size() == 0);
} }
public void testQueryChangeSets_Limit() public void testQueryChangeSets_Limit()
{ {
List<AclChangeSet> results = solrDAO.getAclChangeSets(null, 0L, 50); List<AclChangeSet> results = solrDAO.getAclChangeSets(null, 0L, null, null, 50);
assertTrue("Transaction count not limited", results.size() <= 50); assertTrue("Transaction count not limited", results.size() <= 50);
} }
@@ -116,7 +116,7 @@ public class SOLRDAOTest extends TestCase
public void testQueryAcls_All() public void testQueryAcls_All()
{ {
// Do a query for some changesets // Do a query for some changesets
List<AclChangeSet> aclChangeSets = solrDAO.getAclChangeSets(null, 0L, 50); List<AclChangeSet> aclChangeSets = solrDAO.getAclChangeSets(null, 0L, null, null, 50);
// Choose some changesets with changes // Choose some changesets with changes
int aclTotal = 0; int aclTotal = 0;
@@ -155,7 +155,7 @@ public class SOLRDAOTest extends TestCase
public void testQueryAcls_Single() public void testQueryAcls_Single()
{ {
List<AclChangeSet> aclChangeSets = solrDAO.getAclChangeSets(null, 0L, 1000); List<AclChangeSet> aclChangeSets = solrDAO.getAclChangeSets(null, 0L, null, null, 1000);
// Find one with multiple ALCs // Find one with multiple ALCs
AclChangeSet aclChangeSet = null; AclChangeSet aclChangeSet = null;
for (AclChangeSet aclChangeSetLoop : aclChangeSets) for (AclChangeSet aclChangeSetLoop : aclChangeSets)
@@ -208,7 +208,7 @@ public class SOLRDAOTest extends TestCase
try try
{ {
solrDAO.getTransactions(null, startTime, 0); solrDAO.getTransactions(null, startTime, null, null, 0);
fail("Must have result limit"); fail("Must have result limit");
} }
catch (IllegalArgumentException e) catch (IllegalArgumentException e)
@@ -220,13 +220,13 @@ public class SOLRDAOTest extends TestCase
public void testQueryTransactions_Time() public void testQueryTransactions_Time()
{ {
long startTime = System.currentTimeMillis() + (5 * 60000L); // The future long startTime = System.currentTimeMillis() + (5 * 60000L); // The future
List<Transaction> results = solrDAO.getTransactions(null, startTime, 50); List<Transaction> results = solrDAO.getTransactions(null, startTime, null, null, 50);
assertTrue("Transaction count not limited", results.size() == 0); assertTrue("Transaction count not limited", results.size() == 0);
} }
public void testQueryTransactions_Limit() public void testQueryTransactions_Limit()
{ {
List<Transaction> results = solrDAO.getTransactions(null, 0L, 50); List<Transaction> results = solrDAO.getTransactions(null, 0L, null, null, 50);
assertTrue("Transaction count not limited", results.size() <= 50); assertTrue("Transaction count not limited", results.size() <= 50);
} }
@@ -234,7 +234,7 @@ public class SOLRDAOTest extends TestCase
{ {
long startTime = 0L; long startTime = 0L;
List<Transaction> txns = solrDAO.getTransactions(null, startTime, 500); List<Transaction> txns = solrDAO.getTransactions(null, startTime, null, null, 500);
List<Long> txnIds = toTxnIds(txns); List<Long> txnIds = toTxnIds(txns);
@@ -249,7 +249,7 @@ public class SOLRDAOTest extends TestCase
public void testGetNodesForStore() public void testGetNodesForStore()
{ {
List<Transaction> txns = solrDAO.getTransactions(null, null, 500); List<Transaction> txns = solrDAO.getTransactions(null, null, null, null, 500);
List<Long> txnIds = toTxnIds(txns); List<Long> txnIds = toTxnIds(txns);
@@ -262,7 +262,7 @@ public class SOLRDAOTest extends TestCase
public void testGetNodesForTxnRange() public void testGetNodesForTxnRange()
{ {
List<Transaction> txns = solrDAO.getTransactions(null, null, 500); List<Transaction> txns = solrDAO.getTransactions(null, null, null, null, 500);
List<Long> txnIds = toTxnIds(txns); List<Long> txnIds = toTxnIds(txns);

View File

@@ -31,8 +31,9 @@ public class SOLRTrackingParameters
private Long fromIdInclusive; private Long fromIdInclusive;
private Long fromCommitTimeInclusive; private Long fromCommitTimeInclusive;
private List<Long> ids; private List<Long> ids;
private Long fromRelatedIdInclusive; private Long toIdExclusive;
private Long toRelatedIdExclusive; private Long toCommitTimeExclusive;
private boolean trueOrFalse; private boolean trueOrFalse;
public Long getFromIdInclusive() public Long getFromIdInclusive()
@@ -65,26 +66,6 @@ public class SOLRTrackingParameters
this.ids = ids; this.ids = ids;
} }
public Long getFromRelatedIdInclusive()
{
return fromRelatedIdInclusive;
}
public void setFromRelatedIdInclusive(Long fromRelatedIdInclusive)
{
this.fromRelatedIdInclusive = fromRelatedIdInclusive;
}
public Long getToRelatedIdExclusive()
{
return toRelatedIdExclusive;
}
public void setToRelatedIdExclusive(Long toRelatedIdExclusive)
{
this.toRelatedIdExclusive = toRelatedIdExclusive;
}
/** /**
* Helper for cross-DB boolean support * Helper for cross-DB boolean support
* *
@@ -121,17 +102,97 @@ public class SOLRTrackingParameters
this.trueOrFalse = trueOrFalse; this.trueOrFalse = trueOrFalse;
} }
public Long getToIdExclusive()
{
return toIdExclusive;
}
public void setToIdExclusive(Long toIdExclusive)
{
this.toIdExclusive = toIdExclusive;
}
public Long getToCommitTimeExclusive()
{
return toCommitTimeExclusive;
}
public void setToCommitTimeExclusive(Long toCommitTimeExclusive)
{
this.toCommitTimeExclusive = toCommitTimeExclusive;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((fromCommitTimeInclusive == null) ? 0 : fromCommitTimeInclusive.hashCode());
result = prime * result + ((fromIdInclusive == null) ? 0 : fromIdInclusive.hashCode());
result = prime * result + ((ids == null) ? 0 : ids.hashCode());
result = prime * result + ((toCommitTimeExclusive == null) ? 0 : toCommitTimeExclusive.hashCode());
result = prime * result + ((toIdExclusive == null) ? 0 : toIdExclusive.hashCode());
result = prime * result + (trueOrFalse ? 1231 : 1237);
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
SOLRTrackingParameters other = (SOLRTrackingParameters) obj;
if (fromCommitTimeInclusive == null)
{
if (other.fromCommitTimeInclusive != null)
return false;
}
else if (!fromCommitTimeInclusive.equals(other.fromCommitTimeInclusive))
return false;
if (fromIdInclusive == null)
{
if (other.fromIdInclusive != null)
return false;
}
else if (!fromIdInclusive.equals(other.fromIdInclusive))
return false;
if (ids == null)
{
if (other.ids != null)
return false;
}
else if (!ids.equals(other.ids))
return false;
if (toCommitTimeExclusive == null)
{
if (other.toCommitTimeExclusive != null)
return false;
}
else if (!toCommitTimeExclusive.equals(other.toCommitTimeExclusive))
return false;
if (toIdExclusive == null)
{
if (other.toIdExclusive != null)
return false;
}
else if (!toIdExclusive.equals(other.toIdExclusive))
return false;
if (trueOrFalse != other.trueOrFalse)
return false;
return true;
}
@Override @Override
public String toString() public String toString()
{ {
StringBuilder sb = new StringBuilder(512); return "SOLRTrackingParameters [fromIdInclusive="
sb.append("SOLRTrackingParameters") + fromIdInclusive + ", fromCommitTimeInclusive=" + fromCommitTimeInclusive + ", ids=" + ids + ", toIdExclusive=" + toIdExclusive + ", toCommitTimeExclusive="
.append(", fromIdInclusive").append(fromIdInclusive) + toCommitTimeExclusive + ", trueOrFalse=" + trueOrFalse + "]";
.append(", ids").append(ids == null ? null : ids.size())
.append(", fromCommitTimeInclusive").append(fromCommitTimeInclusive == null ? null : new Date(fromCommitTimeInclusive))
.append(", fromRelatedIdInclusive=").append(fromRelatedIdInclusive)
.append(", toRelatedIdExclusive").append(toRelatedIdExclusive)
.append("]");
return sb.toString();
} }
} }

View File

@@ -72,7 +72,7 @@ public class SOLRDAOImpl implements SOLRDAO
*/ */
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<AclChangeSet> getAclChangeSets(Long minAclChangeSetId, Long fromCommitTime, int maxResults) public List<AclChangeSet> getAclChangeSets(Long minAclChangeSetId, Long fromCommitTime, Long maxAclChangeSetId, Long toCommitTime, int maxResults)
{ {
if (maxResults <= 0 || maxResults == Integer.MAX_VALUE) if (maxResults <= 0 || maxResults == Integer.MAX_VALUE)
{ {
@@ -82,6 +82,8 @@ public class SOLRDAOImpl implements SOLRDAO
SOLRTrackingParameters params = new SOLRTrackingParameters(); SOLRTrackingParameters params = new SOLRTrackingParameters();
params.setFromIdInclusive(minAclChangeSetId); params.setFromIdInclusive(minAclChangeSetId);
params.setFromCommitTimeInclusive(fromCommitTime); params.setFromCommitTimeInclusive(fromCommitTime);
params.setToIdExclusive(maxAclChangeSetId);
params.setToCommitTimeExclusive(toCommitTime);
return (List<AclChangeSet>) template.selectList(SELECT_CHANGESETS_SUMMARY, params, new RowBounds(0, maxResults)); return (List<AclChangeSet>) template.selectList(SELECT_CHANGESETS_SUMMARY, params, new RowBounds(0, maxResults));
} }
@@ -118,7 +120,7 @@ public class SOLRDAOImpl implements SOLRDAO
*/ */
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<Transaction> getTransactions(Long minTxnId, Long fromCommitTime, int maxResults) public List<Transaction> getTransactions(Long minTxnId, Long fromCommitTime, Long maxTxnId, Long toCommitTime, int maxResults)
{ {
if (maxResults <= 0 || maxResults == Integer.MAX_VALUE) if (maxResults <= 0 || maxResults == Integer.MAX_VALUE)
{ {
@@ -128,6 +130,8 @@ public class SOLRDAOImpl implements SOLRDAO
SOLRTrackingParameters params = new SOLRTrackingParameters(); SOLRTrackingParameters params = new SOLRTrackingParameters();
params.setFromIdInclusive(minTxnId); params.setFromIdInclusive(minTxnId);
params.setFromCommitTimeInclusive(fromCommitTime); params.setFromCommitTimeInclusive(fromCommitTime);
params.setToIdExclusive(maxTxnId);
params.setToCommitTimeExclusive(toCommitTime);
return (List<Transaction>) template.selectList(SELECT_TRANSACTIONS, params, new RowBounds(0, maxResults)); return (List<Transaction>) template.selectList(SELECT_TRANSACTIONS, params, new RowBounds(0, maxResults));
} }

View File

@@ -36,10 +36,12 @@ public interface SOLRTrackingComponent
* *
* @param minAclChangeSetId minimum ACL changeset ID - (inclusive and optional) * @param minAclChangeSetId minimum ACL changeset ID - (inclusive and optional)
* @param fromCommitTime minimum ACL commit time - (inclusive and optional) * @param fromCommitTime minimum ACL commit time - (inclusive and optional)
* @param maxAclChangeSetId max ACL changeset ID - (exclusive and optional)
* @param toCommitTime max ACL commit time - (exclusive and optional)
* @param maxResults limit the results. 0 or Integer.MAX_VALUE does not limit the results * @param maxResults limit the results. 0 or Integer.MAX_VALUE does not limit the results
* @return list of ACL changesets * @return list of ACL changesets
*/ */
public List<AclChangeSet> getAclChangeSets(Long minAclChangeSetId, Long fromCommitTime, int maxResults); public List<AclChangeSet> getAclChangeSets(Long minAclChangeSetId, Long fromCommitTime, Long maxAclChangeSetId, Long toCommitTime, int maxResults);
/** /**
* Get the ACLs with paging options for a specific ACL ChangeSet * Get the ACLs with paging options for a specific ACL ChangeSet
@@ -64,10 +66,12 @@ public interface SOLRTrackingComponent
* *
* @param minTxnId greater than or equal to minTxnId * @param minTxnId greater than or equal to minTxnId
* @param fromCommitTime greater than or equal to transaction commit time * @param fromCommitTime greater than or equal to transaction commit time
* @param maxTxnId less than maxTxnId
* @param toCommitTimeint less then toCommitTimeint
* @param maxResults limit the results. 0 or Integer.MAX_VALUE does not limit the results * @param maxResults limit the results. 0 or Integer.MAX_VALUE does not limit the results
* @return list of transactions * @return list of transactions
*/ */
public List<Transaction> getTransactions(Long minTxnId, Long fromCommitTime, int maxResults); public List<Transaction> getTransactions(Long minTxnId, Long fromCommitTime, Long maxTxnId, Long toCommitTimeint, int maxResults);
/** /**
* Get the nodes satisfying the constraints in nodeParameters * Get the nodes satisfying the constraints in nodeParameters

View File

@@ -150,11 +150,11 @@ public class SOLRTrackingComponentImpl implements SOLRTrackingComponent
} }
@Override @Override
public List<AclChangeSet> getAclChangeSets(Long minAclChangeSetId, Long fromCommitTime, int maxResults) public List<AclChangeSet> getAclChangeSets(Long minAclChangeSetId, Long fromCommitTime, Long maxAclChangeSetId, Long toCommitTime, int maxResults)
{ {
if(enabled) if(enabled)
{ {
List<AclChangeSet> changesets = solrDAO.getAclChangeSets(minAclChangeSetId, fromCommitTime, maxResults); List<AclChangeSet> changesets = solrDAO.getAclChangeSets(minAclChangeSetId, fromCommitTime, maxAclChangeSetId, toCommitTime, maxResults);
return changesets; return changesets;
} }
else else
@@ -272,11 +272,11 @@ public class SOLRTrackingComponentImpl implements SOLRTrackingComponent
} }
@Override @Override
public List<Transaction> getTransactions(Long minTxnId, Long fromCommitTime, int maxResults) public List<Transaction> getTransactions(Long minTxnId, Long fromCommitTime, Long maxTxnId, Long toCommitTime, int maxResults)
{ {
if(enabled) if(enabled)
{ {
List<Transaction> txns = solrDAO.getTransactions(minTxnId, fromCommitTime, maxResults); List<Transaction> txns = solrDAO.getTransactions(minTxnId, fromCommitTime, maxTxnId, toCommitTime, maxResults);
return txns; return txns;
} }
else else

View File

@@ -23,6 +23,7 @@ import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@@ -111,7 +112,7 @@ public class SOLRTrackingComponentTest extends TestCase
public void testGetAcls_Simple() public void testGetAcls_Simple()
{ {
List<AclChangeSet> cs = solrTrackingComponent.getAclChangeSets(null, null, 50); List<AclChangeSet> cs = solrTrackingComponent.getAclChangeSets(null, null, null, null, 50);
assertTrue("Expected results to be limited in number", cs.size() <= 50); assertTrue("Expected results to be limited in number", cs.size() <= 50);
List<Long> aclChangeSetIds = new ArrayList<Long>(50); List<Long> aclChangeSetIds = new ArrayList<Long>(50);
int totalAcls = 0; int totalAcls = 0;
@@ -141,13 +142,13 @@ public class SOLRTrackingComponentTest extends TestCase
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
SOLRTest st = new SOLRTest3(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, "testGetNodeMetaData", true, true); SOLRTest st = new SOLRTest3(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, "testGetNodeMetaData", true, true);
st.buildTransactions(); List<Long> createdTransactions = st.buildTransactions();
List<Transaction> txns = solrTrackingComponent.getTransactions(null, startTime, 50); List<Transaction> txns = solrTrackingComponent.getTransactions(null, startTime, null, null, 50);
int[] updates = new int[] {1, 1}; int[] updates = new int[] {1, 1};
int[] deletes = new int[] {0, 1}; int[] deletes = new int[] {0, 1};
List<Long> txnIds = checkTransactions(txns, 2, updates, deletes); List<Long> txnIds = checkTransactions(txns, createdTransactions, updates, deletes);
NodeParameters nodeParameters = new NodeParameters(); NodeParameters nodeParameters = new NodeParameters();
nodeParameters.setTransactionIds(txnIds); nodeParameters.setTransactionIds(txnIds);
@@ -163,13 +164,13 @@ public class SOLRTrackingComponentTest extends TestCase
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
SOLRTest st = new SOLRTestResidualProperties(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, "testNodeMetaDataNullPropertyValue", true, true); SOLRTest st = new SOLRTestResidualProperties(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, "testNodeMetaDataNullPropertyValue", true, true);
st.buildTransactions(); List<Long> createdTransactions = st.buildTransactions();
List<Transaction> txns = solrTrackingComponent.getTransactions(null, startTime, 50); List<Transaction> txns = solrTrackingComponent.getTransactions(null, startTime, null, null, 50);
int[] updates = new int[] {2}; int[] updates = new int[] {2};
int[] deletes = new int[] {0}; int[] deletes = new int[] {0};
List<Long> txnIds = checkTransactions(txns, 1, updates, deletes); List<Long> txnIds = checkTransactions(txns, createdTransactions, updates, deletes);
NodeParameters nodeParameters = new NodeParameters(); NodeParameters nodeParameters = new NodeParameters();
nodeParameters.setTransactionIds(txnIds); nodeParameters.setTransactionIds(txnIds);
@@ -187,19 +188,19 @@ public class SOLRTrackingComponentTest extends TestCase
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
SOLRTest st = new SOLRTest100Nodes(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, "testGetNodeMetaData", true, true); SOLRTest st = new SOLRTest100Nodes(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, "testGetNodeMetaData", true, true);
st.buildTransactions(); List<Long> createdTransactions = st.buildTransactions();
List<Transaction> txns = solrTrackingComponent.getTransactions(null, startTime, 50); List<Transaction> txns = solrTrackingComponent.getTransactions(null, startTime, null, null, 50);
int[] updates = new int[] {100}; int[] updates = new int[] {100};
int[] deletes = new int[] {0}; int[] deletes = new int[] {0};
List<Long> txnIds = checkTransactions(txns, 1, updates, deletes); List<Long> txnIds = checkTransactions(txns, createdTransactions, updates, deletes);
NodeParameters nodeParameters = new NodeParameters(); NodeParameters nodeParameters = new NodeParameters();
nodeParameters.setTransactionIds(txnIds); nodeParameters.setTransactionIds(txnIds);
getNodes(nodeParameters, st); getNodes(nodeParameters, st);
// assertEquals("Unxpected number of nodes", 3, nodeQueryCallback.getSuccessCount()); // assertEquals("Unxpected number of nodes", 3, nodeQueryCallback.getSuccessCount());
NodeMetaDataParameters nodeMetaDataParams = new NodeMetaDataParameters(); NodeMetaDataParameters nodeMetaDataParams = new NodeMetaDataParameters();
nodeMetaDataParams.setNodeIds(st.getNodeIds()); nodeMetaDataParams.setNodeIds(st.getNodeIds());
@@ -208,7 +209,7 @@ public class SOLRTrackingComponentTest extends TestCase
nodeMetaDataParams.setMaxResults(20); nodeMetaDataParams.setMaxResults(20);
getNodeMetaData(nodeMetaDataParams, null, st); getNodeMetaData(nodeMetaDataParams, null, st);
// assertEquals("Unxpected number of nodes", 3, bt.getSuccessCount()); // assertEquals("Unxpected number of nodes", 3, bt.getSuccessCount());
} }
public void testNodeMetaDataManyNodes() throws Exception public void testNodeMetaDataManyNodes() throws Exception
@@ -216,13 +217,13 @@ public class SOLRTrackingComponentTest extends TestCase
long fromCommitTime = System.currentTimeMillis(); long fromCommitTime = System.currentTimeMillis();
SOLRTest st = new SOLRTest4(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, "testNodeMetaDataManyNodes", true, false); SOLRTest st = new SOLRTest4(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, "testNodeMetaDataManyNodes", true, false);
st.buildTransactions(); List<Long> createdTransactions = st.buildTransactions();
List<Transaction> txns = solrTrackingComponent.getTransactions(null, fromCommitTime, 50); List<Transaction> txns = solrTrackingComponent.getTransactions(null, fromCommitTime, null, null, 50);
int[] updates = new int[] {2001}; int[] updates = new int[] {2001};
int[] deletes = new int[] {0}; int[] deletes = new int[] {0};
List<Long> txnIds = checkTransactions(txns, 1, updates, deletes); List<Long> txnIds = checkTransactions(txns, createdTransactions, updates, deletes);
NodeParameters nodeParameters = new NodeParameters(); NodeParameters nodeParameters = new NodeParameters();
nodeParameters.setTransactionIds(txnIds); nodeParameters.setTransactionIds(txnIds);
@@ -273,13 +274,13 @@ public class SOLRTrackingComponentTest extends TestCase
long fromCommitTime = System.currentTimeMillis(); long fromCommitTime = System.currentTimeMillis();
SOLRTest st = new SOLRTest4(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, "testNodeMetaDataManyNodes", true, false); SOLRTest st = new SOLRTest4(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, "testNodeMetaDataManyNodes", true, false);
st.buildTransactions(); List<Long> createdTransactions = st.buildTransactions();
List<Transaction> txns = solrTrackingComponent.getTransactions(null, fromCommitTime, 50); List<Transaction> txns = solrTrackingComponent.getTransactions(null, fromCommitTime, null, null, 50);
int[] updates = new int[] {2001}; int[] updates = new int[] {2001};
int[] deletes = new int[] {0}; int[] deletes = new int[] {0};
List<Long> txnIds = checkTransactions(txns, 1, updates, deletes); List<Long> txnIds = checkTransactions(txns, createdTransactions, updates, deletes);
NodeParameters nodeParameters = new NodeParameters(); NodeParameters nodeParameters = new NodeParameters();
nodeParameters.setTransactionIds(txnIds); nodeParameters.setTransactionIds(txnIds);
@@ -303,13 +304,13 @@ public class SOLRTrackingComponentTest extends TestCase
long fromCommitTime = System.currentTimeMillis(); long fromCommitTime = System.currentTimeMillis();
SOLRTest st = new SOLRTest5(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, "testNodeMetaDataNullPropertyValue", true, true); SOLRTest st = new SOLRTest5(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, "testNodeMetaDataNullPropertyValue", true, true);
st.buildTransactions(); List<Long> createdTransactions = st.buildTransactions();
List<Transaction> txns = solrTrackingComponent.getTransactions(null, fromCommitTime, 50); List<Transaction> txns = solrTrackingComponent.getTransactions(null, fromCommitTime, null, null, 50);
int[] updates = new int[] {11}; int[] updates = new int[] {11};
int[] deletes = new int[] {0}; int[] deletes = new int[] {0};
List<Long> txnIds = checkTransactions(txns, 1, updates, deletes); List<Long> txnIds = checkTransactions(txns, createdTransactions, updates, deletes);
NodeParameters nodeParameters = new NodeParameters(); NodeParameters nodeParameters = new NodeParameters();
nodeParameters.setTransactionIds(txnIds); nodeParameters.setTransactionIds(txnIds);
@@ -325,13 +326,13 @@ public class SOLRTrackingComponentTest extends TestCase
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
SOLRTest st = new SOLRTest1(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, "testFilters", true, true); SOLRTest st = new SOLRTest1(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, "testFilters", true, true);
st.buildTransactions(); List<Long> createdTransactions = st.buildTransactions();
List<Transaction> txns = solrTrackingComponent.getTransactions(null, startTime, 50); List<Transaction> txns = solrTrackingComponent.getTransactions(null, startTime, null, null, 50);
int[] updates = new int[] {1, 1}; int[] updates = new int[] {1, 1};
int[] deletes = new int[] {0, 1}; int[] deletes = new int[] {0, 1};
List<Long> txnIds = checkTransactions(txns, 2, updates, deletes); List<Long> txnIds = checkTransactions(txns, createdTransactions, updates, deletes);
NodeParameters nodeParameters = new NodeParameters(); NodeParameters nodeParameters = new NodeParameters();
nodeParameters.setTransactionIds(txnIds); nodeParameters.setTransactionIds(txnIds);
@@ -547,9 +548,23 @@ public class SOLRTrackingComponentTest extends TestCase
} }
} }
private List<Long> checkTransactions(List<Transaction> txns, int numTransactions, int[] updates, int[] deletes) private List<Long> checkTransactions(List<Transaction> txns, List<Long> createdTransaction, int[] updates, int[] deletes)
{ {
assertEquals("Number of transactions is incorrect", numTransactions, txns.size()); ArrayList<Transaction> matchedTransactions = new ArrayList<Transaction>();
HashSet<Long> toMatch = new HashSet<Long>();
toMatch.addAll(createdTransaction);
for(Transaction found : txns)
{
if(found != null)
{
if(toMatch.contains(found.getId()))
{
matchedTransactions.add(found);
}
}
}
assertEquals("Number of transactions is incorrect", createdTransaction.size(), txns.size());
List<Long> txnIds = new ArrayList<Long>(txns.size()); List<Long> txnIds = new ArrayList<Long>(txns.size());
int i = 0; int i = 0;
@@ -582,14 +597,14 @@ public class SOLRTrackingComponentTest extends TestCase
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
txnHelper.doInTransaction(new RetryingTransactionCallback<Void>() txnHelper.doInTransaction(new RetryingTransactionCallback<Void>()
{ {
@Override @Override
public Void execute() throws Throwable public Void execute() throws Throwable
{ {
solrTrackingComponent.getNodesMetadata(params, filter, bt); solrTrackingComponent.getNodesMetadata(params, filter, bt);
return null; return null;
} }
}, true, true); }, true, true);
long endTime = System.currentTimeMillis(); long endTime = System.currentTimeMillis();
bt.runNodeMetaDataChecks(params.getMaxResults()); bt.runNodeMetaDataChecks(params.getMaxResults());
@@ -625,7 +640,7 @@ public class SOLRTrackingComponentTest extends TestCase
SOLRTest(RetryingTransactionHelper txnHelper, FileFolderService fileFolderService, NodeDAO nodeDAO, NodeService nodeService, DictionaryService dictionaryService, SOLRTest(RetryingTransactionHelper txnHelper, FileFolderService fileFolderService, NodeDAO nodeDAO, NodeService nodeService, DictionaryService dictionaryService,
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks) NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
{ {
this.txnHelper = txnHelper; this.txnHelper = txnHelper;
this.nodeService = nodeService; this.nodeService = nodeService;
this.rootNodeRef = rootNodeRef; this.rootNodeRef = rootNodeRef;
@@ -640,7 +655,7 @@ public class SOLRTrackingComponentTest extends TestCase
this.doNodeChecks = doNodeChecks; this.doNodeChecks = doNodeChecks;
this.doMetaDataChecks = doMetaDataChecks; this.doMetaDataChecks = doMetaDataChecks;
this.doChecks = doNodeChecks || doMetaDataChecks; this.doChecks = doNodeChecks || doMetaDataChecks;
} }
void runNodeChecks(int maxResults) void runNodeChecks(int maxResults)
{ {
@@ -695,7 +710,7 @@ public class SOLRTrackingComponentTest extends TestCase
} }
protected abstract int getExpectedNumNodes(); protected abstract int getExpectedNumNodes();
protected abstract void buildTransactionsInternal(); protected abstract List<Long> buildTransactionsInternal();
public NodeAssertions getNodeAssertions(NodeRef nodeRef) public NodeAssertions getNodeAssertions(NodeRef nodeRef)
{ {
@@ -722,9 +737,9 @@ public class SOLRTrackingComponentTest extends TestCase
} }
} }
void buildTransactions() List<Long> buildTransactions()
{ {
buildTransactionsInternal(); return buildTransactionsInternal();
} }
@Override @Override
@@ -791,7 +806,7 @@ public class SOLRTrackingComponentTest extends TestCase
assertEquals("Properties are incorrect", actualProperties, properties); assertEquals("Properties are incorrect", actualProperties, properties);
NodeAssertions assertions = getNodeAssertions(nodeRef); NodeAssertions assertions = getNodeAssertions(nodeRef);
// NodeAssertions assertions = nodes.get(nodeRef); // NodeAssertions assertions = nodes.get(nodeRef);
Set<QName> expectedAspects = assertions.getAspects(); Set<QName> expectedAspects = assertions.getAspects();
if(expectedAspects != null) if(expectedAspects != null)
@@ -815,9 +830,9 @@ public class SOLRTrackingComponentTest extends TestCase
} }
// TODO complete path tests // TODO complete path tests
// List<Path> actualPaths = nodeMetaData.getPaths(); // List<Path> actualPaths = nodeMetaData.getPaths();
// List<Path> expectedPaths = nodeService.getPaths(nodeRef, false); // List<Path> expectedPaths = nodeService.getPaths(nodeRef, false);
// assertEquals("Paths are incorrect", expectedPaths, actualPaths); // assertEquals("Paths are incorrect", expectedPaths, actualPaths);
boolean expectAspects = assertions.isExpectAspects(); boolean expectAspects = assertions.isExpectAspects();
if(expectAspects && nodeMetaData.getAspects() == null) if(expectAspects && nodeMetaData.getAspects() == null)
@@ -920,20 +935,22 @@ public class SOLRTrackingComponentTest extends TestCase
SOLRTest1( SOLRTest1(
RetryingTransactionHelper txnHelper, FileFolderService fileFolderService, NodeDAO nodeDAO, NodeService nodeService, DictionaryService dictionaryService, RetryingTransactionHelper txnHelper, FileFolderService fileFolderService, NodeDAO nodeDAO, NodeService nodeService, DictionaryService dictionaryService,
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks) NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
{ {
super(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks); super(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks);
} }
public int getExpectedNumNodes() public int getExpectedNumNodes()
{ {
return 3; return 3;
} }
protected void buildTransactionsInternal() protected List<Long> buildTransactionsInternal()
{ {
txnHelper.doInTransaction(new RetryingTransactionCallback<Void>() ArrayList<Long> txs = new ArrayList<Long>(2);
{
public Void execute() throws Throwable txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
{
public Long execute() throws Throwable
{ {
PropertyMap props = new PropertyMap(); PropertyMap props = new PropertyMap();
props.put(ContentModel.PROP_NAME, "Container1"); props.put(ContentModel.PROP_NAME, "Container1");
@@ -947,26 +964,27 @@ public class SOLRTrackingComponentTest extends TestCase
FileInfo contentInfo = fileFolderService.create(container, "Content1", ContentModel.TYPE_CONTENT); FileInfo contentInfo = fileFolderService.create(container, "Content1", ContentModel.TYPE_CONTENT);
content1 = contentInfo.getNodeRef(); content1 = contentInfo.getNodeRef();
return null; return nodeDAO.getNodeRefStatus(content1).getDbTxnId();
} }
}); }));
txnHelper.doInTransaction(new RetryingTransactionCallback<Void>() txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
{ {
public Void execute() throws Throwable public Long execute() throws Throwable
{ {
FileInfo contentInfo = fileFolderService.create(container, "Content2", ContentModel.TYPE_CONTENT); FileInfo contentInfo = fileFolderService.create(container, "Content2", ContentModel.TYPE_CONTENT);
content2 = contentInfo.getNodeRef(); content2 = contentInfo.getNodeRef();
fileFolderService.delete(content1); fileFolderService.delete(content1);
return null; return nodeDAO.getNodeRefStatus(content1).getDbTxnId();
} }
}); }));
setExpectedNodeStatus(container, NodeStatus.UPDATED); setExpectedNodeStatus(container, NodeStatus.UPDATED);
setExpectedNodeStatus(content1, NodeStatus.DELETED); setExpectedNodeStatus(content1, NodeStatus.DELETED);
setExpectedNodeStatus(content2, NodeStatus.UPDATED); setExpectedNodeStatus(content2, NodeStatus.UPDATED);
return txs;
} }
} }
@@ -978,20 +996,22 @@ public class SOLRTrackingComponentTest extends TestCase
SOLRTest3(RetryingTransactionHelper txnHelper, FileFolderService fileFolderService, NodeDAO nodeDAO, NodeService nodeService, DictionaryService dictionaryService, SOLRTest3(RetryingTransactionHelper txnHelper, FileFolderService fileFolderService, NodeDAO nodeDAO, NodeService nodeService, DictionaryService dictionaryService,
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks) NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
{ {
super(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks); super(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks);
} }
public int getExpectedNumNodes() public int getExpectedNumNodes()
{ {
return 3; return 3;
} }
protected void buildTransactionsInternal() protected List<Long> buildTransactionsInternal()
{ {
txnHelper.doInTransaction(new RetryingTransactionCallback<Void>() ArrayList<Long> txs = new ArrayList<Long>(2);
{
public Void execute() throws Throwable txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
{
public Long execute() throws Throwable
{ {
PropertyMap props = new PropertyMap(); PropertyMap props = new PropertyMap();
props.put(ContentModel.PROP_NAME, "Container1"); props.put(ContentModel.PROP_NAME, "Container1");
@@ -1009,13 +1029,13 @@ public class SOLRTrackingComponentTest extends TestCase
aspectProperties.put(ContentModel.PROP_AUTHOR, "steve"); aspectProperties.put(ContentModel.PROP_AUTHOR, "steve");
nodeService.addAspect(content1, ContentModel.ASPECT_AUTHOR, aspectProperties); nodeService.addAspect(content1, ContentModel.ASPECT_AUTHOR, aspectProperties);
return null; return nodeDAO.getNodeRefStatus(content1).getDbTxnId();
} }
}); }));
txnHelper.doInTransaction(new RetryingTransactionCallback<Void>() txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
{ {
public Void execute() throws Throwable public Long execute() throws Throwable
{ {
FileInfo contentInfo = fileFolderService.create(container, "Content2", ContentModel.TYPE_CONTENT); FileInfo contentInfo = fileFolderService.create(container, "Content2", ContentModel.TYPE_CONTENT);
content2 = contentInfo.getNodeRef(); content2 = contentInfo.getNodeRef();
@@ -1023,13 +1043,15 @@ public class SOLRTrackingComponentTest extends TestCase
nodeService.addAspect(content2, ContentModel.ASPECT_TEMPORARY, null); nodeService.addAspect(content2, ContentModel.ASPECT_TEMPORARY, null);
fileFolderService.delete(content1); fileFolderService.delete(content1);
return null; return nodeDAO.getNodeRefStatus(content1).getDbTxnId();
} }
}); }));
setExpectedNodeStatus(container, NodeStatus.UPDATED); setExpectedNodeStatus(container, NodeStatus.UPDATED);
setExpectedNodeStatus(content1, NodeStatus.DELETED); setExpectedNodeStatus(content1, NodeStatus.DELETED);
setExpectedNodeStatus(content2, NodeStatus.UPDATED); setExpectedNodeStatus(content2, NodeStatus.UPDATED);
return txs;
} }
} }
@@ -1037,20 +1059,22 @@ public class SOLRTrackingComponentTest extends TestCase
{ {
SOLRTest100Nodes(RetryingTransactionHelper txnHelper, FileFolderService fileFolderService, NodeDAO nodeDAO, NodeService nodeService, DictionaryService dictionaryService, SOLRTest100Nodes(RetryingTransactionHelper txnHelper, FileFolderService fileFolderService, NodeDAO nodeDAO, NodeService nodeService, DictionaryService dictionaryService,
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks) NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
{ {
super(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks); super(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks);
} }
public int getExpectedNumNodes() public int getExpectedNumNodes()
{ {
return 100; return 100;
} }
protected void buildTransactionsInternal() protected List<Long> buildTransactionsInternal()
{ {
txnHelper.doInTransaction(new RetryingTransactionCallback<Void>() ArrayList<Long> txs = new ArrayList<Long>(2);
{
public Void execute() throws Throwable txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
{
public Long execute() throws Throwable
{ {
PropertyMap props = new PropertyMap(); PropertyMap props = new PropertyMap();
props.put(ContentModel.PROP_NAME, "Container100Nodes"); props.put(ContentModel.PROP_NAME, "Container100Nodes");
@@ -1070,9 +1094,10 @@ public class SOLRTrackingComponentTest extends TestCase
setExpectedNodeStatus(nodeRef, NodeStatus.UPDATED); setExpectedNodeStatus(nodeRef, NodeStatus.UPDATED);
} }
return null; return nodeDAO.getNodeRefStatus(container).getDbTxnId();
} }
}); }));
return txs;
} }
} }
@@ -1082,20 +1107,22 @@ public class SOLRTrackingComponentTest extends TestCase
SOLRTest4(RetryingTransactionHelper txnHelper, FileFolderService fileFolderService, NodeDAO nodeDAO, NodeService nodeService, DictionaryService dictionaryService, SOLRTest4(RetryingTransactionHelper txnHelper, FileFolderService fileFolderService, NodeDAO nodeDAO, NodeService nodeService, DictionaryService dictionaryService,
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks) NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
{ {
super(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks); super(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks);
} }
public int getExpectedNumNodes() public int getExpectedNumNodes()
{ {
return numContentNodes + 1; return numContentNodes + 1;
} }
public void buildTransactionsInternal() public List<Long> buildTransactionsInternal()
{ {
txnHelper.doInTransaction(new RetryingTransactionCallback<Void>() ArrayList<Long> txs = new ArrayList<Long>(2);
{
public Void execute() throws Throwable txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
{
public Long execute() throws Throwable
{ {
PropertyMap props = new PropertyMap(); PropertyMap props = new PropertyMap();
props.put(ContentModel.PROP_NAME, containerName); props.put(ContentModel.PROP_NAME, containerName);
@@ -1121,10 +1148,12 @@ public class SOLRTrackingComponentTest extends TestCase
setExpectedNodeStatus(nodeRef, NodeStatus.UPDATED); setExpectedNodeStatus(nodeRef, NodeStatus.UPDATED);
} }
return null; return nodeDAO.getNodeRefStatus(container).getDbTxnId();
} }
}); }));
return txs;
} }
} }
private static class SOLRTest5 extends SOLRTest private static class SOLRTest5 extends SOLRTest
@@ -1133,25 +1162,27 @@ public class SOLRTrackingComponentTest extends TestCase
SOLRTest5(RetryingTransactionHelper txnHelper, FileFolderService fileFolderService, NodeDAO nodeDAO, NodeService nodeService, DictionaryService dictionaryService, SOLRTest5(RetryingTransactionHelper txnHelper, FileFolderService fileFolderService, NodeDAO nodeDAO, NodeService nodeService, DictionaryService dictionaryService,
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks) NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
{ {
super(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks); super(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks);
} }
public int getExpectedNumNodes() public int getExpectedNumNodes()
{ {
return numContentNodes + 1; return numContentNodes + 1;
} }
public void buildTransactionsInternal() public List<Long> buildTransactionsInternal()
{ {
ArrayList<Long> txs = new ArrayList<Long>(2);
final String titles[] = final String titles[] =
{ {
"caf\u00E9", "\u00E7edilla", "\u00E0\u00E1\u00E2\u00E3", "\u00EC\u00ED\u00EE\u00EF", "\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6", "caf\u00E9", "\u00E7edilla", "\u00E0\u00E1\u00E2\u00E3", "\u00EC\u00ED\u00EE\u00EF", "\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6",
"caf\u00E9", "\u00E7edilla", "\u00E0\u00E1\u00E2\u00E3", "\u00EC\u00ED\u00EE\u00EF", "\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6" "caf\u00E9", "\u00E7edilla", "\u00E0\u00E1\u00E2\u00E3", "\u00EC\u00ED\u00EE\u00EF", "\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6"
}; };
txnHelper.doInTransaction(new RetryingTransactionCallback<Void>() txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
{ {
public Void execute() throws Throwable public Long execute() throws Throwable
{ {
PropertyMap props = new PropertyMap(); PropertyMap props = new PropertyMap();
props.put(ContentModel.PROP_NAME, containerName); props.put(ContentModel.PROP_NAME, containerName);
@@ -1183,9 +1214,11 @@ public class SOLRTrackingComponentTest extends TestCase
setExpectedNodeStatus(nodeRef, NodeStatus.UPDATED); setExpectedNodeStatus(nodeRef, NodeStatus.UPDATED);
} }
return null; return nodeDAO.getNodeRefStatus(container).getDbTxnId();
} }
}); }));
return txs;
} }
} }
@@ -1197,20 +1230,22 @@ public class SOLRTrackingComponentTest extends TestCase
SOLRTestResidualProperties( SOLRTestResidualProperties(
RetryingTransactionHelper txnHelper, FileFolderService fileFolderService, NodeDAO nodeDAO, NodeService nodeService, DictionaryService dictionaryService, RetryingTransactionHelper txnHelper, FileFolderService fileFolderService, NodeDAO nodeDAO, NodeService nodeService, DictionaryService dictionaryService,
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks) NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
{ {
super(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService,rootNodeRef, containerName, doNodeChecks, doMetaDataChecks); super(txnHelper, fileFolderService, nodeDAO, nodeService, dictionaryService,rootNodeRef, containerName, doNodeChecks, doMetaDataChecks);
} }
public int getExpectedNumNodes() public int getExpectedNumNodes()
{ {
return 2; return 2;
} }
protected void buildTransactionsInternal() protected List<Long> buildTransactionsInternal()
{ {
txnHelper.doInTransaction(new RetryingTransactionCallback<Void>() ArrayList<Long> txs = new ArrayList<Long>(2);
{
public Void execute() throws Throwable txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
{
public Long execute() throws Throwable
{ {
PropertyMap props = new PropertyMap(); PropertyMap props = new PropertyMap();
props.put(ContentModel.PROP_NAME, "ContainerResidual"); props.put(ContentModel.PROP_NAME, "ContainerResidual");
@@ -1225,12 +1260,15 @@ public class SOLRTrackingComponentTest extends TestCase
content = contentInfo.getNodeRef(); content = contentInfo.getNodeRef();
nodeService.setProperty(content, QName.createQName("{rubbish}rubbish"), "Rubbish"); nodeService.setProperty(content, QName.createQName("{rubbish}rubbish"), "Rubbish");
return null;
return nodeDAO.getNodeRefStatus(container).getDbTxnId();
} }
}); }));
setExpectedNodeStatus(container, NodeStatus.UPDATED); setExpectedNodeStatus(container, NodeStatus.UPDATED);
setExpectedNodeStatus(content, NodeStatus.UPDATED); setExpectedNodeStatus(content, NodeStatus.UPDATED);
return txs;
} }
} }
} }