Pull up fix for CONNECTORS-1010 from trunk
git-svn-id: https://svn.apache.org/repos/asf/manifoldcf/branches/release-1.7-branch@1618145 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES.txt b/CHANGES.txt
index 0bf80ea..a7dd154 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -3,6 +3,10 @@
======================= Release 1.7 =====================
+CONNECTORS-1010: Use uri hash instead of full URI as lock key
+to prevent "file name too long" errors on windows.
+(Erlend Garåsen, Shigeki Kobayashi, Karl Wright)
+
CONNECTORS-1007: Fix CMIS connector so that tests pass.
(Karl Wright)
diff --git a/framework/agents/src/main/java/org/apache/manifoldcf/agents/incrementalingest/IncrementalIngester.java b/framework/agents/src/main/java/org/apache/manifoldcf/agents/incrementalingest/IncrementalIngester.java
index 68047e6..60ad010 100644
--- a/framework/agents/src/main/java/org/apache/manifoldcf/agents/incrementalingest/IncrementalIngester.java
+++ b/framework/agents/src/main/java/org/apache/manifoldcf/agents/incrementalingest/IncrementalIngester.java
@@ -1036,13 +1036,15 @@
}
String[] lockArray = new String[validURIcount];
String[] validURIArray = new String[validURIcount];
+ String[] validURIHashArray = new String[validURIcount];
validURIcount = 0;
for (int i = 0; i < uris.length; i++)
{
if (uris[i] != null && uris[i].getURI() != null)
{
validURIArray[validURIcount] = uris[i].getURI();
- lockArray[validURIcount] = outputConnectionName+":"+validURIArray[validURIcount];
+ validURIHashArray[validURIcount] = uris[i].getURIHash();
+ lockArray[validURIcount] = outputConnectionName+":"+validURIHashArray[validURIcount];
validURIcount++;
}
}
@@ -1079,9 +1081,11 @@
Set<String> docURIValues = new HashSet<String>();
for (String docDBString : validURIArray)
{
- String docDBHashString = ManifoldCF.hash(docDBString);
docURIValues.add(docDBString);
- docURIHashValues.add(docDBHashString);
+ }
+ for (String docDBString : validURIHashArray)
+ {
+ docURIHashValues.add(docDBString);
}
// Now, perform n queries, each of them no larger the maxInClause in length.
@@ -1248,13 +1252,15 @@
}
String[] lockArray = new String[validURIcount];
String[] validURIArray = new String[validURIcount];
+ String[] validURIHashArray = new String[validURIcount];
validURIcount = 0;
for (int i = 0; i < uris.length; i++)
{
if (uris[i] != null && uris[i].getURI() != null)
{
validURIArray[validURIcount] = uris[i].getURI();
- lockArray[validURIcount] = outputConnectionName+":"+validURIArray[validURIcount];
+ validURIHashArray[validURIcount] = uris[i].getURIHash();
+ lockArray[validURIcount] = outputConnectionName+":"+validURIHashArray[validURIcount];
validURIcount++;
}
}
@@ -1291,9 +1297,11 @@
Set<String> docURIValues = new HashSet<String>();
for (String docDBString : validURIArray)
{
- String docDBHashString = ManifoldCF.hash(docDBString);
docURIValues.add(docDBString);
- docURIHashValues.add(docDBHashString);
+ }
+ for (String docDBString : validURIHashArray)
+ {
+ docURIHashValues.add(docDBString);
}
// Now, perform n queries, each of them no larger the maxInClause in length.
@@ -2237,7 +2245,7 @@
new MultiClause(docKeyField,list),
new UnitaryClause(outputConnNameField,outputConnectionName)});
- IResultSet set = performQuery("SELECT "+docKeyField+","+docURIField+","+lastOutputVersionField+" FROM "+getTableName()+" WHERE "+
+ IResultSet set = performQuery("SELECT "+docKeyField+","+docURIField+","+uriHashField+","+lastOutputVersionField+" FROM "+getTableName()+" WHERE "+
query,newList,null,null);
// Go through list and put into buckets.
@@ -2245,14 +2253,17 @@
{
IResultRow row = set.getRow(i);
String docHash = row.getValue(docKeyField).toString();
- Integer position = (Integer)map.get(docHash);
+ Integer position = map.get(docHash);
if (position != null)
{
String lastURI = (String)row.getValue(docURIField);
if (lastURI != null && lastURI.length() == 0)
lastURI = null;
+ String lastURIHash = (String)row.getValue(uriHashField);
+ if (lastURIHash != null && lastURIHash.length() == 0)
+ lastURIHash = null;
String lastOutputVersion = (String)row.getValue(lastOutputVersionField);
- rval[position.intValue()] = new DeleteInfo(lastURI,lastOutputVersion);
+ rval[position.intValue()] = new DeleteInfo(lastURI,lastURIHash,lastOutputVersion);
}
}
}
@@ -2283,7 +2294,7 @@
new UnitaryClause(outputConnNameField,outputConnectionName),
((componentHash==null)?new NullCheckClause(componentHashField,true):new UnitaryClause(componentHashField,componentHash))});
- IResultSet set = performQuery("SELECT "+docKeyField+","+docURIField+","+lastOutputVersionField+" FROM "+getTableName()+" WHERE "+
+ IResultSet set = performQuery("SELECT "+docKeyField+","+docURIField+","+uriHashField+","+lastOutputVersionField+" FROM "+getTableName()+" WHERE "+
query,newList,null,null);
// Go through list and put into buckets.
@@ -2297,8 +2308,11 @@
String lastURI = (String)row.getValue(docURIField);
if (lastURI != null && lastURI.length() == 0)
lastURI = null;
+ String lastURIHash = (String)row.getValue(uriHashField);
+ if (lastURIHash != null && lastURIHash.length() == 0)
+ lastURIHash = null;
String lastOutputVersion = (String)row.getValue(lastOutputVersionField);
- rval[position.intValue()] = new DeleteInfo(lastURI,lastOutputVersion);
+ rval[position.intValue()] = new DeleteInfo(lastURI,lastURIHash,lastOutputVersion);
}
}
}
@@ -2351,11 +2365,13 @@
protected static class DeleteInfo
{
protected String uriValue;
+ protected String uriHashValue;
protected String outputVersion;
- public DeleteInfo(String uriValue, String outputVersion)
+ public DeleteInfo(String uriValue, String uriHashValue, String outputVersion)
{
this.uriValue = uriValue;
+ this.uriHashValue = uriHashValue;
this.outputVersion = outputVersion;
}
@@ -2364,6 +2380,11 @@
return uriValue;
}
+ public String getURIHash()
+ {
+ return uriHashValue;
+ }
+
public String getOutputVersion()
{
return outputVersion;
@@ -3325,7 +3346,7 @@
// But, since we need to insure that any given URI is only worked on by one thread at a time, use critical sections
// to block the rare case that multiple threads try to work on the same URI.
- String[] lockArray = computeLockArray(documentURI,oldURI,outputConnectionName);
+ String[] lockArray = computeLockArray(documentURIHash,oldURIHash,outputConnectionName);
lockManager.enterLocks(null,null,lockArray);
try
{