Bug 444623 - infinite loop in MyersDiff
Summary: infinite loop in MyersDiff
Status: NEW
Alias: None
Product: JGit
Classification: Technology
Component: JGit (show other bugs)
Version: 3.4   Edit
Hardware: PC Linux
: P3 major (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-09-19 15:13 EDT by Hugo Arès CLA
Modified: 2014-09-19 15:13 EDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Hugo Arès CLA 2014-09-19 15:13:41 EDT
I do not have a way to reproduce that problem but this happened twice on our gerrit production server. JGit do an infinite loop in MyersDiff. The only info I have is the stack trace:


"InteractiveMergeabilityChecks-1" prio=10 tid=0x00007fbb300d7000 nid=0xe392 runnable [0x00007fbc469e7000]
   java.lang.Thread.State: RUNNABLE
	at org.eclipse.jgit.diff.MyersDiff$MiddleEdit$BackwardEditPaths.snake(MyersDiff.java:501)
	at org.eclipse.jgit.diff.MyersDiff$MiddleEdit$EditPaths.calculate(MyersDiff.java:414)
	at org.eclipse.jgit.diff.MyersDiff$MiddleEdit.calculate(MyersDiff.java:260)
	at org.eclipse.jgit.diff.MyersDiff.calculateEdits(MyersDiff.java:188)
	at org.eclipse.jgit.diff.MyersDiff.calculateEdits(MyersDiff.java:165)
	at org.eclipse.jgit.diff.MyersDiff.<init>(MyersDiff.java:148)
	at org.eclipse.jgit.diff.MyersDiff.<init>(MyersDiff.java:112)
	at org.eclipse.jgit.diff.MyersDiff$1.diffNonCommon(MyersDiff.java:119)
	at org.eclipse.jgit.diff.HistogramDiff$State.diffReplace(HistogramDiff.java:172)
	at org.eclipse.jgit.diff.HistogramDiff.diffNonCommon(HistogramDiff.java:133)
	at org.eclipse.jgit.diff.LowLevelDiffAlgorithm.diffNonCommon(LowLevelDiffAlgorithm.java:59)
	at org.eclipse.jgit.diff.DiffAlgorithm.diff(DiffAlgorithm.java:123)
	at org.eclipse.jgit.diff.DiffFormatter.diff(DiffFormatter.java:958)
	at org.eclipse.jgit.diff.DiffFormatter.createFormatResult(DiffFormatter.java:936)
	at org.eclipse.jgit.diff.DiffFormatter.toFileHeader(DiffFormatter.java:889)
	at com.google.gerrit.server.patch.PatchListLoader.readPatchList(PatchListLoader.java:161)
	at com.google.gerrit.server.patch.PatchListLoader.load(PatchListLoader.java:87)
	at com.google.gerrit.server.patch.PatchListLoader.load(PatchListLoader.java:70)
	at com.google.gerrit.server.cache.h2.H2CacheImpl$Loader.load(H2CacheImpl.java:249)
	at com.google.gerrit.server.cache.h2.H2CacheImpl$Loader.load(H2CacheImpl.java:229)
	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3524)
	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2317)
	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2280)
	- locked <0x00007fc39784c4c8> (a com.google.common.cache.LocalCache$StrongAccessEntry)
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2195)
	at com.google.common.cache.LocalCache.get(LocalCache.java:3934)
	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3938)
	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4821)
	at com.google.gerrit.server.cache.h2.H2CacheImpl.get(H2CacheImpl.java:111)
	at com.google.gerrit.server.patch.PatchListCacheImpl.get(PatchListCacheImpl.java:81)
	at com.google.gerrit.server.patch.PatchListCacheImpl.get(PatchListCacheImpl.java:99)
	at com.google.gerrit.server.query.change.ChangeData.currentFilePaths(ChangeData.java:278)
	at com.google.gerrit.server.index.ChangeField.getFileParts(ChangeField.java:195)
	at com.google.gerrit.server.index.ChangeField$12.get(ChangeField.java:210)
	at com.google.gerrit.server.index.ChangeField$12.get(ChangeField.java:206)
	at com.google.gerrit.server.index.Schema$1.apply(Schema.java:103)
	at com.google.gerrit.server.index.Schema$1.apply(Schema.java:98)
	at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:646)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at com.google.gerrit.lucene.LuceneChangeIndex.toDocument(LuceneChangeIndex.java:483)
	at com.google.gerrit.lucene.LuceneChangeIndex.replace(LuceneChangeIndex.java:296)
	at com.google.gerrit.server.index.ChangeIndexer.index(ChangeIndexer.java:131)
	at com.google.gerrit.server.index.ChangeIndexer.index(ChangeIndexer.java:142)
	at com.google.gerrit.server.change.Mergeable.refresh(Mergeable.java:196)
	at com.google.gerrit.server.change.Mergeable.apply(Mergeable.java:113)
	at com.google.gerrit.server.change.MergeabilityChecker$Task.call(MergeabilityChecker.java:341)
	at com.google.gerrit.server.change.MergeabilityChecker$Task.call(MergeabilityChecker.java:294)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
	at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:364)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:724)