Merged V3.4-BUG-FIX to HEAD

27967: Fixes: ALF-8696. L10N updates
   27969: Fixes: ALF-8698 - FR L10N string updates
   28011: Fixes: ALF-8776 - IT L10N updates
   28035: Fix for ALF-2711 - Spring Surf contrib: Unable to upload files over 2GB
   28052: Fixes: ALF-8724
   28054: Merged PATCHES/V3.4.1 to V3.4-BUG-FIX
      27765: ALF-8607: Detect and invalidate stale cached nodes during transaction tracking
         - Also increased debug logging around IndexTransactionTracker
      27953: ALF-8607: Store FTSSTATUS on a supplementary document in the index for each transaction, so that we don't forget to FTS reindex the document if it has already been updated by a later transaction.
      27965: ALF-8607: Complete query parsers' handling of new FTSREF field
      28033: ALF-8811: Removed invalid caching of permissions from Invite wizards. Finish off ALF-4597
      28053: ALF-8815: Make it possible to copy a node with the cm:storeSelector aspect
         - The copied node's content will already be in the target store when its properties (including storeName) are first applied
   28055: Merged PATCHES/V3.3.4 to V3.4-BUG-FIX (RECORD ONLY)
      27830: ALF-8476: Possible fix to StackOverflowError when searching a transaction with a huge number of deletions
      27854: Merged V3.3 to PATCHES/V3.3.4
         27851: Fix for ALF-8476: CLONE - Query consuming all heap and receiving an OOM exception
            - actually fixes stack overflow with skipTo when there are lots of deleted docs in an index in a row (<10000 on the default settings)
   28060: ALF-8779: I18N Fix from Bitrock.
   28065: ALF-8105: Correction to ETWOTWO-1384 fix: do not embed schema in XForm definition if it references externals to avoid performance issues
   - Previous fix embedded a partial, invalid schema that caused XML parser warnings
   28070: Suggested fix for ALF-8852. Upgrading pdfbox,fontbox,jempbox from 1.3.1 to 1.5.0.
   28071: Fix for symptom raised in ALF-8780: Forms system does not show control for associations of cm:person type
   
   This hides the rn:rendition association from default forms as it should never be edited by a user. The proper fix for the bug is to supply form config for the custom type.
   28072: Fixed ALF-8050: Inconsistency in validation of webforms with maxOccurs="*"
   28077: ALF-6293: Fix from Bitrock
   - Installing the tomcat service logs more stuff on Linux and Windows
   28084: ALF-8877: Upgraded freemarker to 2.3.18
   28090: Fix failing forms related tests
   28118: ALF-8557 Added NullScope object used by JbpmNode. 
   28123: Fix for ALF-8207
   28124: ALF-7708 The JavaScript expressions in workflows should no longer be re-formatted.
   28134: Incremented version revision for 3.4.3
   28135: Merged V3.4 to V3.4-BUG-FIX
      27962: Update to Bitrock 7.1.1 + use absolute path to Bitrock license under protected build-classpath directory
      27971: Fix for ALF-8704 - RM search doesn't work
      27984: ALF-8771: Installer now uses cmd /C start /MIN /WAIT to run minimized commands synchronously rather than asynchronously!
      - Also uses -w flag when registering postgres service to make its startup synchronous
      - Should mean that the install waits for postgres to start before issuing commands to it!
      27987: ALF-8666: Bitrock service run and install scripts now execute commands sequentially
      - start /MIN /WAIT cmd /C used instead of start /MIN
      27993: ALF-8761: getWindowsACL fix from Bitrock
      27996: ALF-8710: Run servicerun.bat as admin user
      27998: ALF-7164: NFS: User with editor role cannot edit content
      28021: ALF-8823: PostgreSQL Windows service is registered under SYSTEM user. Therefore initial initdb must be done as this user for service to start.
      28022: ALF-8823: Additional fix from Bitrock
      28041: Another try at fixing ALF-8704 - RM search doesn't work
      28119: ALF-8853: I18N fallout from ALF-6469. TransferService default group must be looked up by QName rather than cm:name


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@28137 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Dave Ward
2011-06-01 09:22:18 +00:00
parent 2be73ece54
commit de41d53b53
20 changed files with 201 additions and 54 deletions

View File

@@ -512,21 +512,35 @@ found:
// If the batch is full or if there are no more voids, fire the query
if (voidTxnIdBatch.size() == VOID_BATCH_SIZE || !voidTxnIdIterator.hasNext())
{
if (logger.isDebugEnabled())
{
logger.debug("Checking void txn batch " + voidTxnIdBatch);
}
List<Transaction> filledTxns = nodeDAO.getTxnsByCommitTimeAscending(voidTxnIdBatch);
for (Transaction txn : filledTxns)
{
InIndex inIndex;
if (txn.getCommitTimeMs() == null) // Just coping with Hibernate mysteries
{
continue;
}
else if (isTxnPresentInIndex(txn) != InIndex.NO)
else if ((inIndex = isTxnPresentInIndex(txn)) != InIndex.NO)
{
if (logger.isDebugEnabled())
{
logger.debug("Expiring indexed void txn " + txn.getId() + " (inIndex = " + inIndex + ")");
}
// It is in the index so expire it from the voids.
// This can happen if void was committed locally.
toExpireTxnIds.add(txn.getId());
}
else
{
if (logger.isDebugEnabled())
{
logger.debug("Found unindexed void txn " + txn.getId() + " (inIndex = " + inIndex + ")");
}
// It's not in the index so we have a timespamp from which to kick off
// It is a bone fide first transaction. A void has been filled.
long txnCommitTimeMs = txn.getCommitTimeMs().longValue();
@@ -547,6 +561,11 @@ found:
TxnRecord voidTxnRecord = voids.get(voidTxnId);
if (voidTxnRecord.txnCommitTime < maxHistoricalTime)
{
if (logger.isDebugEnabled())
{
logger.debug("Expiring void txn " + voidTxnId + " ("
+ (maxHistoricalTime - voidTxnRecord.txnCommitTime) + " ms too old)");
}
// It's too late for this void whether or not it has become live
toExpireTxnIds.add(voidTxnId);
}
@@ -622,10 +641,11 @@ found:
processedTxnRecord.txnCommitTime = txnCommitTimeMs;
processedTxnRecords.put(txnId, processedTxnRecord);
// Remove this entry from the void list - it is not void
voids.remove(txnId);
boolean previouslyVoid = voids.remove(txnId) != null;
// Reindex the transaction if we are forcing it or if it isn't in the index already
if (forceReindex || isTxnPresentInIndex(txn) == InIndex.NO)
InIndex inIndex = InIndex.INDETERMINATE;
if (forceReindex || (inIndex = isTxnPresentInIndex(txn)) == InIndex.NO)
{
// From this point on, until the tracker has caught up, all transactions need to be indexed
forceReindex = true;
@@ -633,14 +653,29 @@ found:
txnIdBuffer.add(txnId);
if (logger.isDebugEnabled())
{
logger.debug("Reindexing transaction: " + txn);
if (previouslyVoid)
{
logger.debug("Reindexing previously void transaction: " + txn + " (inIndex = " + inIndex + ")");
}
else
{
logger.debug("Reindexing transaction: " + txn + " (inIndex = " + inIndex + ")");
}
}
}
else
{
if (logger.isDebugEnabled())
{
logger.debug("Reindex skipping transaction: " + txn);
if (previouslyVoid)
{
logger.debug("Reindex skipping previously void transaction: " + txn + " (inIndex = " + inIndex
+ ")");
}
else
{
logger.debug("Reindex skipping transaction: " + txn + " (inIndex = " + inIndex + ")");
}
}
}