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
       {