From 089f90fa02b60ae88ee5ecbd5773163d5d9b2462 Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Thu, 24 Nov 2011 16:13:17 +0100 Subject: [PATCH] Maven: do not try to update broken indices repeatedly, UnsupportedExistingIndicesException fixed (IDEA-67512) --- .../jetbrains/idea/maven/model/MavenId.java | 2 +- .../embedder/Maven2ServerIndexerImpl.java | 62 +++++++++---------- .../idea/maven/indices/MavenIndex.java | 13 ++-- .../idea/maven/indices/MavenIndicesTest.java | 8 +++ 4 files changed, 49 insertions(+), 36 deletions(-) diff --git a/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/model/MavenId.java b/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/model/MavenId.java index 5abcfd29d61d..d585d3a2afd2 100644 --- a/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/model/MavenId.java +++ b/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/model/MavenId.java @@ -66,7 +66,7 @@ public class MavenId implements Serializable { public static void append(StringBuilder builder, String part) { if (builder.length() != 0) builder.append(':'); - builder.append(part); + builder.append(part == null ? "" : part); } @Override diff --git a/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/embedder/Maven2ServerIndexerImpl.java b/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/embedder/Maven2ServerIndexerImpl.java index 0795ac478495..a0608e50613d 100644 --- a/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/embedder/Maven2ServerIndexerImpl.java +++ b/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/embedder/Maven2ServerIndexerImpl.java @@ -77,13 +77,13 @@ public class Maven2ServerIndexerImpl extends MavenRemoteObject implements MavenS @Nullable String url, @NotNull File indexDir) throws MavenServerIndexerException { try { - IndexingContext context = myIndexer.addIndexingContext(indexId, - repositoryId, - file, - indexDir, - url, - null, // repo update url - NexusIndexer.FULL_INDEX); + IndexingContext context = myIndexer.addIndexingContextForced(indexId, + repositoryId, + file, + indexDir, + url, + null, // repo update url + NexusIndexer.FULL_INDEX); int id = System.identityHashCode(context); myIndices.put(id, context); return id; @@ -143,31 +143,31 @@ public class Maven2ServerIndexerImpl extends MavenRemoteObject implements MavenS Maven2ServerEmbedderImpl embedder = Maven2ServerEmbedderImpl.create(settings); try { request.setResourceFetcher(new Maven2ServerIndexFetcher(index.getRepositoryId(), - index.getRepositoryUrl(), - embedder.getComponent(WagonManager.class), - new TransferListenerAdapter(indicator) { - @Override - protected void downloadProgress(long downloaded, long total) { - super.downloadProgress(downloaded, total); - try { - myIndicator.setFraction(((double)downloaded) / total); - } - catch (RemoteException e) { - throw new RuntimeRemoteException(e); - } - } + index.getRepositoryUrl(), + embedder.getComponent(WagonManager.class), + new TransferListenerAdapter(indicator) { + @Override + protected void downloadProgress(long downloaded, long total) { + super.downloadProgress(downloaded, total); + try { + myIndicator.setFraction(((double)downloaded) / total); + } + catch (RemoteException e) { + throw new RuntimeRemoteException(e); + } + } - @Override - public void transferCompleted(TransferEvent event) { - super.transferCompleted(event); - try { - myIndicator.setText2("Processing indices..."); - } - catch (RemoteException e) { - throw new RuntimeRemoteException(e); - } - } - })); + @Override + public void transferCompleted(TransferEvent event) { + super.transferCompleted(event); + try { + myIndicator.setText2("Processing indices..."); + } + catch (RemoteException e) { + throw new RuntimeRemoteException(e); + } + } + })); myUpdater.fetchAndUpdateIndex(request); } finally { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenIndex.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenIndex.java index e541585e25ee..eee6ce7dd687 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenIndex.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenIndex.java @@ -162,7 +162,7 @@ public class MavenIndex { catch (Exception e2) { throw new MavenIndexException("Cannot open index " + myDir.getPath(), e2); } - isBroken = true; + markAsBroken(); } } finally { @@ -581,12 +581,17 @@ public class MavenIndex { } } } - - isBroken = true; - myListener.indexIsBroken(this); + markAsBroken(); return defaultValue; } + private void markAsBroken() { + if (!isBroken) { + myListener.indexIsBroken(this); + } + isBroken = true; + } + private interface IndexTask { T doTask() throws Exception; } diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/indices/MavenIndicesTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/indices/MavenIndicesTest.java index 9f7a2e5a76b7..08879cc27df5 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/indices/MavenIndicesTest.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/indices/MavenIndicesTest.java @@ -274,6 +274,14 @@ public class MavenIndicesTest extends MavenIndicesTestCase { myIndices.updateOrRepair(i, true, getMavenGeneralSettings(), EMPTY_MAVEN_PROCESS); } + public void testFoo() throws Exception { + myIndices.add("id", myRepositoryHelper.getTestDataPath("local1"), MavenIndex.Kind.LOCAL); + shutdownIndices(); + initIndices(); + + assertFalse(isBroken); + } + public void testSavingFailureMessage() throws Exception { MavenIndex i = myIndices.add("id", "xxx", MavenIndex.Kind.REMOTE); myIndices.updateOrRepair(i, true, getMavenGeneralSettings(), EMPTY_MAVEN_PROCESS);