From 93fedd74a499f6f0042db716e19674a888484afd Mon Sep 17 00:00:00 2001 From: Alexander Bubenchikov Date: Thu, 7 Oct 2021 15:22:15 +0200 Subject: [PATCH] [maven] - make indicator pull-based instead of push - for IDEA-266222 GitOrigin-RevId: 3873b485c4eef703b4919b59dd80de51b35cb49c --- .../idea/maven/server/MavenServerIndexer.java | 5 ++++- .../embedder/Maven2ServerIndexerImpl.java | 21 +++++++++--------- .../maven/server/Maven3ServerIndexerImpl.java | 15 ++++++------- .../maven/server/DummyMavenServerConnector.kt | 3 ++- .../maven/server/MavenIndexerWrapper.java | 22 ++++++++++++++----- 5 files changed, 40 insertions(+), 26 deletions(-) diff --git a/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/server/MavenServerIndexer.java b/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/server/MavenServerIndexer.java index ba6b8c23ae7c..298117792d15 100644 --- a/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/server/MavenServerIndexer.java +++ b/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/server/MavenServerIndexer.java @@ -25,6 +25,7 @@ import java.io.File; import java.rmi.Remote; import java.rmi.RemoteException; import java.util.Collection; +import java.util.List; import java.util.Set; public interface MavenServerIndexer extends Remote { @@ -44,7 +45,9 @@ public interface MavenServerIndexer extends Remote { MavenServerIndexerException, MavenServerProcessCanceledException; - void processArtifacts(int indexId, MavenServerIndicesProcessor processor, MavenToken token) throws RemoteException, MavenServerIndexerException; + @Nullable + //null means no artifacts lasts + List processArtifacts(int indexId, int startFrom, MavenToken token) throws RemoteException, MavenServerIndexerException; IndexedMavenId addArtifact(int indexId, File artifactFile, MavenToken token) throws RemoteException, MavenServerIndexerException; 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 1c291225ab60..35a77baec441 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 @@ -130,9 +130,9 @@ public final class Maven2ServerIndexerImpl extends MavenRemoteObject implements @Override public void updateIndex(int id, MavenServerSettings settings, MavenServerProgressIndicator indicator, MavenToken token) throws - MavenServerIndexerException, - MavenServerProcessCanceledException, - RemoteException { + MavenServerIndexerException, + MavenServerProcessCanceledException, + RemoteException { MavenServerUtil.checkToken(token); IndexingContext index = getIndex(id); @@ -199,7 +199,7 @@ public final class Maven2ServerIndexerImpl extends MavenRemoteObject implements } @Override - public void processArtifacts(int indexId, MavenServerIndicesProcessor processor, MavenToken token) throws MavenServerIndexerException { + public List processArtifacts(int indexId, int startFrom, MavenToken token) throws MavenServerIndexerException { MavenServerUtil.checkToken(token); try { final int CHUNK_SIZE = 10000; @@ -208,7 +208,7 @@ public final class Maven2ServerIndexerImpl extends MavenRemoteObject implements int total = r.numDocs(); List result = new ArrayList(Math.min(CHUNK_SIZE, total)); - for (int i = 0; i < total; i++) { + for (int i = startFrom; i < total; i++) { if (r.isDeleted(i)) continue; Document doc = r.document(i); @@ -226,13 +226,14 @@ public final class Maven2ServerIndexerImpl extends MavenRemoteObject implements result.add(new IndexedMavenId(groupId, artifactId, version, packaging, description)); if (result.size() == CHUNK_SIZE) { - processor.processArtifacts(result); - result.clear(); + return result; } } - - if (!result.isEmpty()) { - processor.processArtifacts(result); + if (result.isEmpty()) { + return null; + } + else { + return result; } } catch (Exception e) { diff --git a/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/Maven3ServerIndexerImpl.java b/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/Maven3ServerIndexerImpl.java index 47cf7ea921e6..e7146402afc0 100644 --- a/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/Maven3ServerIndexerImpl.java +++ b/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/Maven3ServerIndexerImpl.java @@ -214,8 +214,7 @@ public abstract class Maven3ServerIndexerImpl extends MavenRemoteObject implemen @Override - public void processArtifacts(int indexId, MavenServerIndicesProcessor processor, MavenToken token) - throws MavenServerIndexerException { + public List processArtifacts(int indexId, int startFrom, MavenToken token) throws MavenServerIndexerException { MavenServerUtil.checkToken(token); try { final int CHUNK_SIZE = 10000; @@ -224,7 +223,7 @@ public abstract class Maven3ServerIndexerImpl extends MavenRemoteObject implemen int total = r.numDocs(); List result = new ArrayList(Math.min(CHUNK_SIZE, total)); - for (int i = 0; i < total; i++) { + for (int i = startFrom; i < total; i++) { if (r.isDeleted(i)) continue; Document doc = r.document(i); @@ -242,13 +241,13 @@ public abstract class Maven3ServerIndexerImpl extends MavenRemoteObject implemen result.add(new IndexedMavenId(groupId, artifactId, version, packaging, description)); if (result.size() == CHUNK_SIZE) { - processor.processArtifacts(result); - result.clear(); + return result; } } - - if (!result.isEmpty()) { - processor.processArtifacts(result); + if (result.isEmpty()) { + return null; + } else { + return result; } } catch (Exception e) { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/DummyMavenServerConnector.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/DummyMavenServerConnector.kt index b88feb96d112..2745ef8688a2 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/DummyMavenServerConnector.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/DummyMavenServerConnector.kt @@ -130,7 +130,8 @@ class DummyIndexer : MavenServerIndexer { override fun updateIndex(id: Int, settings: MavenServerSettings?, indicator: MavenServerProgressIndicator?, token: MavenToken?) { } - override fun processArtifacts(indexId: Int, processor: MavenServerIndicesProcessor?, token: MavenToken?) { + override fun processArtifacts(indexId: Int, startFrom: Int, token: MavenToken?): List? { + return null } override fun addArtifact(indexId: Int, artifactFile: File?, token: MavenToken?): IndexedMavenId { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/MavenIndexerWrapper.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/MavenIndexerWrapper.java index a327a0fc4f62..f318e04c0e70 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/MavenIndexerWrapper.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/MavenIndexerWrapper.java @@ -19,6 +19,7 @@ import java.io.File; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.util.Collection; +import java.util.List; import java.util.Set; public abstract class MavenIndexerWrapper extends MavenRemoteObjectWrapper { @@ -120,14 +121,23 @@ public abstract class MavenIndexerWrapper extends MavenRemoteObjectWrapper { - MavenServerIndicesProcessor processorWrapper = wrapAndExport(processor); try { - getOrCreateWrappee().processArtifacts(getRemoteId(indexId), processorWrapper, ourToken); + int start = 0; + List list; + do { + list = getOrCreateWrappee().processArtifacts(getRemoteId(indexId), start, ourToken); + if (list != null) { + processor.processArtifacts(list); + start += list.size(); + } + } + while (list != null); + return null; + } catch (Exception e){ + e.printStackTrace(); + return null; } - finally { - UnicastRemoteObject.unexportObject(processorWrapper, true); - } - return null; + }); }