diff --git a/concourse-server/src/main/java/com/cinchapi/concourse/server/storage/db/search/SubstringDeduplicator.java b/concourse-server/src/main/java/com/cinchapi/concourse/server/storage/db/search/SubstringDeduplicator.java index 7428a72f0..1c8cf37ff 100644 --- a/concourse-server/src/main/java/com/cinchapi/concourse/server/storage/db/search/SubstringDeduplicator.java +++ b/concourse-server/src/main/java/com/cinchapi/concourse/server/storage/db/search/SubstringDeduplicator.java @@ -681,9 +681,8 @@ public static boolean substringAppearsEarlier(char[] s, int start, if(len <= 0 || start <= 0) { return false; } - // for each possible earlier start k where k + len ≤ s.length and k - // < start - int maxK = Math.min(start - len, s.length - len); + // Check every earlier start position, including overlapping ranges. + int maxK = Math.min(start - 1, s.length - len); for (int k = 0; k <= maxK; k++) { // compare s[k..k+len) to s[start..end) int i = 0; diff --git a/concourse-server/src/test/java/com/cinchapi/concourse/server/storage/db/search/SubstringDeduplicatorTest.java b/concourse-server/src/test/java/com/cinchapi/concourse/server/storage/db/search/SubstringDeduplicatorTest.java index bae54856a..03a4cdbb0 100644 --- a/concourse-server/src/test/java/com/cinchapi/concourse/server/storage/db/search/SubstringDeduplicatorTest.java +++ b/concourse-server/src/test/java/com/cinchapi/concourse/server/storage/db/search/SubstringDeduplicatorTest.java @@ -54,6 +54,12 @@ public void testDuplicatesNotAddedReproA() { doTestDuplicatesNotAdded(string); } + @Test + public void testDuplicatesNotAddedReproB() { + String string = "wjxzzywpqzaecrgyonfoayffnkletncndqnldjknumlzmmiuxdwjyecwvlhcwrszvutwhqrmylrvrzsqofpurfdmhcccdhompnakqqghgjrjjlqtveyaygdqsfnzftoemdhxkqljjaojhxpyltudgltibecdcigrymowxvqrsoxbdditorpqerdiuvvxwreshlghxapdnapvwacdnanskhokwbqwvrspmfijdcmawflmnlfuyyodhuxfipbuogjmbewlwqeaedortqlgmidgujaiopoblgnomgncfmzomyb"; + doTestDuplicatesNotAdded(string); + } + @Test public void testSanityCheck() { String term = "abrakadabra"; @@ -95,6 +101,8 @@ private void doTestDuplicatesNotAdded(String string) { String ss = string.substring(i, j).trim(); if(!Strings.isNullOrEmpty(ss)) { Text st = Text.wrap(chars, i, j); + System.out.println( + ss + " vs " + st + " with " + i + " and " + j); Assert.assertEquals(expected.add(ss), deduplicator.add(st)); }