OSDN Git Service

Correct endless loop synchronizing tags if a tag update fails.
authorRandy Baumgarte <randy@fbn.cx>
Thu, 24 Feb 2011 00:09:59 +0000 (19:09 -0500)
committerRandy Baumgarte <randy@fbn.cx>
Thu, 24 Feb 2011 01:03:14 +0000 (20:03 -0500)
src/cx/fbn/nevernote/threads/SyncRunner.java

index 0a3221e..a53afd4 100644 (file)
@@ -29,6 +29,7 @@ import java.util.ArrayList;
 import java.util.Calendar;\r
 import java.util.Date;\r
 import java.util.GregorianCalendar;\r
+import java.util.HashMap;\r
 import java.util.List;\r
 import java.util.TreeSet;\r
 import java.util.Vector;\r
@@ -146,6 +147,7 @@ public class SyncRunner extends QObject implements Runnable {
                private final TreeSet<String> ignoreTags;\r
                private final TreeSet<String> ignoreNotebooks;\r
                private final TreeSet<String> ignoreLinkedNotebooks;\r
+               private HashMap<String,String> badTagSync;\r
        \r
                \r
                \r
@@ -774,6 +776,11 @@ public class SyncRunner extends QObject implements Runnable {
                \r
                int sequence;\r
                \r
+               if (badTagSync == null)\r
+                       badTagSync = new HashMap<String,String>();\r
+               else\r
+                       badTagSync.clear();\r
+               \r
                Tag enTag = findNextTag();\r
                while(enTag!=null) {\r
                        if (authRefreshNeeded)\r
@@ -817,20 +824,24 @@ public class SyncRunner extends QObject implements Runnable {
                                updateSequenceNumber = sequence;\r
                                conn.getSyncTable().setUpdateSequenceNumber(updateSequenceNumber);\r
                        } catch (EDAMUserException e) {\r
-                               logger.log(logger.LOW, "*** EDAM User Excepton syncLocalTags");\r
-                               logger.log(logger.LOW, e.toString());           \r
+                               logger.log(logger.LOW, "*** EDAM User Excepton syncLocalTags: " +enTag.getName());\r
+                               logger.log(logger.LOW, e.toString());\r
+                               badTagSync.put(enTag.getGuid(),null);\r
                                error = true;\r
                        } catch (EDAMSystemException e) {\r
-                               logger.log(logger.LOW, "** EDAM System Excepton syncLocalTags");\r
+                               logger.log(logger.LOW, "** EDAM System Excepton syncLocalTags: " +enTag.getName());\r
                                logger.log(logger.LOW, e.toString());   \r
+                               badTagSync.put(enTag.getGuid(),null);\r
                                error = true;\r
                        } catch (EDAMNotFoundException e) {\r
-                               logger.log(logger.LOW, "*** EDAM Not Found Excepton syncLocalTags");\r
-                               logger.log(logger.LOW, e.toString());   \r
+                               logger.log(logger.LOW, "*** EDAM Not Found Excepton syncLocalTags: " +enTag.getName());\r
+                               logger.log(logger.LOW, e.toString());\r
+                               badTagSync.put(enTag.getGuid(),null);\r
                                error = true;\r
                        } catch (TException e) {\r
-                               logger.log(logger.LOW, "*** EDAM TExcepton syncLocalTags");\r
-                               logger.log(logger.LOW, e.toString());           \r
+                               logger.log(logger.LOW, "*** EDAM TExcepton syncLocalTags: " +enTag.getName());\r
+                               logger.log(logger.LOW, e.toString());\r
+                               badTagSync.put(enTag.getGuid(),null);\r
                                error = true;\r
                        }       \r
                        \r
@@ -1442,14 +1453,16 @@ public class SyncRunner extends QObject implements Runnable {
                // Find the parent.  If the parent has a sequence > 0 then it is a good\r
                // parent.\r
                for (int i=0; i<tags.size() && keepRunning; i++) {\r
-                       if (tags.get(i).getParentGuid() == null) {\r
-                               logger.log(logger.HIGH, "Leaving SyncRunner.findNextTag - tag found without parent");\r
-                               return tags.get(i);\r
-                       }\r
-                       Tag parentTag = conn.getTagTable().getTag(tags.get(i).getParentGuid());\r
-                       if (parentTag.getUpdateSequenceNum() > 0) {\r
-                               logger.log(logger.HIGH, "Leaving SyncRunner.findNextTag - tag found");\r
-                               return tags.get(i);\r
+                       if (!badTagSync.containsKey(tags.get(i).getGuid())) {\r
+                               if (tags.get(i).getParentGuid() == null) {\r
+                                       logger.log(logger.HIGH, "Leaving SyncRunner.findNextTag - tag found without parent");\r
+                                       return tags.get(i);\r
+                               }\r
+                               Tag parentTag = conn.getTagTable().getTag(tags.get(i).getParentGuid());\r
+                               if (parentTag.getUpdateSequenceNum() > 0) {\r
+                                       logger.log(logger.HIGH, "Leaving SyncRunner.findNextTag - tag found");\r
+                                       return tags.get(i);\r
+                               }\r
                        }\r
                }\r
                \r