[maven] - make indicator pull-based instead of push - for IDEA-266222

GitOrigin-RevId: 3873b485c4eef703b4919b59dd80de51b35cb49c
This commit is contained in:
Alexander Bubenchikov
2021-10-07 14:09:00 +00:00
committed by intellij-monorepo-bot
parent 241288d3f7
commit 93fedd74a4
5 changed files with 40 additions and 26 deletions
@@ -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<IndexedMavenId> processArtifacts(int indexId, int startFrom, MavenToken token) throws RemoteException, MavenServerIndexerException;
IndexedMavenId addArtifact(int indexId, File artifactFile, MavenToken token) throws RemoteException, MavenServerIndexerException;
@@ -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<IndexedMavenId> 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<IndexedMavenId> result = new ArrayList<IndexedMavenId>(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) {
@@ -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<IndexedMavenId> 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<IndexedMavenId> result = new ArrayList<IndexedMavenId>(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) {
@@ -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<IndexedMavenId>? {
return null
}
override fun addArtifact(indexId: Int, artifactFile: File?, token: MavenToken?): IndexedMavenId {
@@ -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<MavenServerIndexer> {
@@ -120,14 +121,23 @@ public abstract class MavenIndexerWrapper extends MavenRemoteObjectWrapper<Maven
public void processArtifacts(final int indexId, final MavenIndicesProcessor processor) throws MavenServerIndexerException {
perform(() -> {
MavenServerIndicesProcessor processorWrapper = wrapAndExport(processor);
try {
getOrCreateWrappee().processArtifacts(getRemoteId(indexId), processorWrapper, ourToken);
int start = 0;
List<IndexedMavenId> 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;
});
}