diff --git a/code/services-core/control-service/src/main/resources/templates/control/node/node-storage-list.hdb b/code/services-core/control-service/src/main/resources/templates/control/node/node-storage-list.hdb
index 0b51fb1d..177d68e9 100644
--- a/code/services-core/control-service/src/main/resources/templates/control/node/node-storage-list.hdb
+++ b/code/services-core/control-service/src/main/resources/templates/control/node/node-storage-list.hdb
@@ -89,13 +89,15 @@
{{#each storage}}
Type |
+ Node |
+ Path |
Name |
- Path |
{{base.type}} |
+ {{base.node}} |
+ {{base.path}} |
{{base.name}} |
- {{base.path}} |
Created |
diff --git a/code/services-core/executor-service/src/main/java/nu/marginalia/actor/monitor/AbstractProcessSpawnerActor.java b/code/services-core/executor-service/src/main/java/nu/marginalia/actor/monitor/AbstractProcessSpawnerActor.java
index 6e9c5b48..a05700fe 100644
--- a/code/services-core/executor-service/src/main/java/nu/marginalia/actor/monitor/AbstractProcessSpawnerActor.java
+++ b/code/services-core/executor-service/src/main/java/nu/marginalia/actor/monitor/AbstractProcessSpawnerActor.java
@@ -36,6 +36,7 @@ public class AbstractProcessSpawnerActor extends RecordActorPrototype {
public record Initial() implements ActorStep {}
@Resume(behavior = ActorResumeBehavior.RETRY)
public record Monitor(int errorAttempts) implements ActorStep {}
+ @Resume(behavior = ActorResumeBehavior.RESTART)
public record Run(int attempts) implements ActorStep {}
@Terminal
public record Aborted() implements ActorStep {}
diff --git a/code/services-core/executor-service/src/main/java/nu/marginalia/actor/proc/ProcessLivenessMonitorActor.java b/code/services-core/executor-service/src/main/java/nu/marginalia/actor/proc/ProcessLivenessMonitorActor.java
index 0ff1b673..6717ac20 100644
--- a/code/services-core/executor-service/src/main/java/nu/marginalia/actor/proc/ProcessLivenessMonitorActor.java
+++ b/code/services-core/executor-service/src/main/java/nu/marginalia/actor/proc/ProcessLivenessMonitorActor.java
@@ -5,7 +5,9 @@ import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.zaxxer.hikari.HikariDataSource;
import nu.marginalia.actor.prototype.RecordActorPrototype;
+import nu.marginalia.actor.state.ActorResumeBehavior;
import nu.marginalia.actor.state.ActorStep;
+import nu.marginalia.actor.state.Resume;
import nu.marginalia.process.ProcessService;
import nu.marginalia.service.control.ServiceEventLog;
import nu.marginalia.service.module.ServiceConfiguration;
@@ -24,6 +26,7 @@ public class ProcessLivenessMonitorActor extends RecordActorPrototype {
private final int node;
public record Initial() implements ActorStep {}
+ @Resume(behavior = ActorResumeBehavior.RESTART)
public record Monitor() implements ActorStep {}
@Override
diff --git a/code/services-core/executor-service/src/main/java/nu/marginalia/actor/task/ConvertActor.java b/code/services-core/executor-service/src/main/java/nu/marginalia/actor/task/ConvertActor.java
index a5db8769..275f4092 100644
--- a/code/services-core/executor-service/src/main/java/nu/marginalia/actor/task/ConvertActor.java
+++ b/code/services-core/executor-service/src/main/java/nu/marginalia/actor/task/ConvertActor.java
@@ -30,7 +30,7 @@ public class ConvertActor extends RecordActorPrototype {
private final Gson gson;
public record Convert(FileStorageId fid) implements ActorStep {};
- public record ConvertEncyclopedia(String source) implements ActorStep {};
+ public record ConvertEncyclopedia(String source, String baseUrl) implements ActorStep {};
public record ConvertDirtree(String source) implements ActorStep {};
public record ConvertStackexchange(String source) implements ActorStep {};
@Resume(behavior = ActorResumeBehavior.RETRY)
@@ -50,15 +50,9 @@ public class ConvertActor extends RecordActorPrototype {
storageService.relateFileStorages(toProcess.id(), processedArea.id());
storageService.setFileStorageState(processedArea.id(), FileStorageState.NEW);
- // Pre-send convert request
- var request = new ConvertRequest(ConvertAction.ConvertCrawlData,
- null,
- fid,
- processedArea.id());
-
yield new ConvertWait(
processedArea.id(),
- mqConverterOutbox.sendAsync(ConvertRequest.class.getSimpleName(), gson.toJson(request))
+ mqConverterOutbox.sendAsync(ConvertRequest.forCrawlData(fid, processedArea.id()))
);
}
case ConvertDirtree(String source) -> {
@@ -75,18 +69,12 @@ public class ConvertActor extends RecordActorPrototype {
storageService.setFileStorageState(processedArea.id(), FileStorageState.NEW);
- // Pre-send convert request
- var request = new ConvertRequest(ConvertAction.SideloadDirtree,
- sourcePath.toString(),
- null,
- processedArea.id());
-
yield new ConvertWait(
processedArea.id(),
- mqConverterOutbox.sendAsync(ConvertRequest.class.getSimpleName(), gson.toJson(request))
+ mqConverterOutbox.sendAsync(ConvertRequest.forDirtree(sourcePath, processedArea.id()))
);
}
- case ConvertEncyclopedia(String source) -> {
+ case ConvertEncyclopedia(String source, String baseUrl) -> {
Path sourcePath = Path.of(source);
if (!Files.exists(sourcePath))
@@ -101,16 +89,9 @@ public class ConvertActor extends RecordActorPrototype {
storageService.setFileStorageState(processedArea.id(), FileStorageState.NEW);
- // Pre-send convert request
- var request = new ConvertRequest(ConvertAction.SideloadEncyclopedia,
- sourcePath.toString(),
- null,
- processedArea.id());
-
-
yield new ConvertWait(
processedArea.id(),
- mqConverterOutbox.sendAsync(ConvertRequest.class.getSimpleName(), gson.toJson(request))
+ mqConverterOutbox.sendAsync(ConvertRequest.forEncyclopedia(sourcePath, baseUrl, processedArea.id()))
);
}
case ConvertStackexchange(String source) -> {
@@ -129,14 +110,10 @@ public class ConvertActor extends RecordActorPrototype {
storageService.setFileStorageState(processedArea.id(), FileStorageState.NEW);
// Pre-send convert request
- var request = new ConvertRequest(ConvertAction.SideloadStackexchange,
- sourcePath.toString(),
- null,
- processedArea.id());
yield new ConvertWait(
processedArea.id(),
- mqConverterOutbox.sendAsync(ConvertRequest.class.getSimpleName(), gson.toJson(request))
+ mqConverterOutbox.sendAsync(ConvertRequest.forStackexchange(sourcePath, processedArea.id()))
);
}
case ConvertWait(FileStorageId destFid, long msgId) -> {
diff --git a/code/services-core/executor-service/src/main/java/nu/marginalia/actor/task/ConvertAndLoadActor.java b/code/services-core/executor-service/src/main/java/nu/marginalia/actor/task/ConvertAndLoadActor.java
index ea193c9a..bbec71d5 100644
--- a/code/services-core/executor-service/src/main/java/nu/marginalia/actor/task/ConvertAndLoadActor.java
+++ b/code/services-core/executor-service/src/main/java/nu/marginalia/actor/task/ConvertAndLoadActor.java
@@ -116,14 +116,8 @@ public class ConvertAndLoadActor extends RecordActorPrototype {
yield new Convert(fid, processedArea.id());
}
- case Convert(FileStorageId crawlId, FileStorageId processedId, long msgId) when msgId < 0 -> {
- var request = new ConvertRequest(ConvertAction.ConvertCrawlData,
- null,
- crawlId,
- processedId);
- yield new Convert(crawlId, processedId,
- mqConverterOutbox.sendAsync(ConvertRequest.class.getSimpleName(), gson.toJson(request)));
- }
+ case Convert(FileStorageId crawlId, FileStorageId processedId, long msgId) when msgId < 0 ->
+ new Convert(crawlId, processedId, mqConverterOutbox.sendAsync(ConvertRequest.forCrawlData(crawlId, processedId)));
case Convert(FileStorageId crawlId, FileStorageId processedId, long msgId) -> {
var rsp = processWatcher.waitResponse(mqConverterOutbox, ProcessService.ProcessId.CONVERTER, msgId);
@@ -133,8 +127,7 @@ public class ConvertAndLoadActor extends RecordActorPrototype {
yield new Load(List.of(processedId));
}
case Load(List processedIds, long msgId) when msgId < 0 -> {
- var request = new LoadRequest(processedIds);
- long id = mqLoaderOutbox.sendAsync(LoadRequest.class.getSimpleName(), gson.toJson(request));
+ long id = mqLoaderOutbox.sendAsync(new LoadRequest(processedIds));
yield new Load(processedIds, id);
}
@@ -201,8 +194,7 @@ public class ConvertAndLoadActor extends RecordActorPrototype {
}
private long createIndex(IndexName index) throws Exception {
- return mqIndexConstructorOutbox.sendAsync(CreateIndexRequest.class.getSimpleName(),
- gson.toJson(new CreateIndexRequest(index)));
+ return mqIndexConstructorOutbox.sendAsync(new CreateIndexRequest(index));
}
diff --git a/code/services-core/executor-service/src/main/java/nu/marginalia/actor/task/CrawlActor.java b/code/services-core/executor-service/src/main/java/nu/marginalia/actor/task/CrawlActor.java
index 6e0f0a6d..a77a575b 100644
--- a/code/services-core/executor-service/src/main/java/nu/marginalia/actor/task/CrawlActor.java
+++ b/code/services-core/executor-service/src/main/java/nu/marginalia/actor/task/CrawlActor.java
@@ -54,8 +54,7 @@ public class CrawlActor extends RecordActorPrototype {
storageService.relateFileStorages(storage.id(), dataArea.id());
// Send convert request
- var request = new CrawlRequest(List.of(fid), dataArea.id());
- long msgId = mqCrawlerOutbox.sendAsync(CrawlRequest.class.getSimpleName(), gson.toJson(request));
+ long msgId = mqCrawlerOutbox.sendAsync(new CrawlRequest(List.of(fid), dataArea.id()));
yield new Crawl(msgId);
}
diff --git a/code/services-core/executor-service/src/main/java/nu/marginalia/actor/task/RecrawlActor.java b/code/services-core/executor-service/src/main/java/nu/marginalia/actor/task/RecrawlActor.java
index 5604ec44..9a98497c 100644
--- a/code/services-core/executor-service/src/main/java/nu/marginalia/actor/task/RecrawlActor.java
+++ b/code/services-core/executor-service/src/main/java/nu/marginalia/actor/task/RecrawlActor.java
@@ -46,8 +46,7 @@ public class RecrawlActor extends RecordActorPrototype {
refreshService.synchronizeDomainList();
- var request = new CrawlRequest(null, fid);
- long id = mqCrawlerOutbox.sendAsync(CrawlRequest.class.getSimpleName(), gson.toJson(request));
+ long id = mqCrawlerOutbox.sendAsync(new CrawlRequest(null, fid));
yield new Crawl(id);
}
diff --git a/code/services-core/executor-service/src/main/java/nu/marginalia/executor/svc/SideloadService.java b/code/services-core/executor-service/src/main/java/nu/marginalia/executor/svc/SideloadService.java
index 6991eb90..a74e70ee 100644
--- a/code/services-core/executor-service/src/main/java/nu/marginalia/executor/svc/SideloadService.java
+++ b/code/services-core/executor-service/src/main/java/nu/marginalia/executor/svc/SideloadService.java
@@ -21,7 +21,11 @@ public class SideloadService {
}
public Object sideloadEncyclopedia(Request request, Response response) throws Exception {
- actorControlService.startFrom(ExecutorActor.CONVERT, new ConvertActor.ConvertEncyclopedia(request.queryParams("path")));
+ actorControlService.startFrom(ExecutorActor.CONVERT,
+ new ConvertActor.ConvertEncyclopedia(
+ request.queryParams("path"),
+ request.queryParams("baseUrl")
+ ));
return "";
}
diff --git a/code/services-core/query-service/src/main/java/nu/marginalia/query/QueryGRPCService.java b/code/services-core/query-service/src/main/java/nu/marginalia/query/QueryGRPCService.java
index b6abed22..aa9fdaf5 100644
--- a/code/services-core/query-service/src/main/java/nu/marginalia/query/QueryGRPCService.java
+++ b/code/services-core/query-service/src/main/java/nu/marginalia/query/QueryGRPCService.java
@@ -86,6 +86,9 @@ public class QueryGRPCService extends QueryApiGrpc.QueryApiImplBase {
private final ExecutorService es = Executors.newVirtualThreadPerTaskExecutor();
+ private static final Comparator comparator =
+ Comparator.comparing(RpcDecoratedResultItem::getRankingScore);
+
private List executeQueries(RpcIndexQuery indexRequest, int totalSize) throws InterruptedException
{
List>> tasks = createTasks(indexRequest);
@@ -119,8 +122,6 @@ public class QueryGRPCService extends QueryApiGrpc.QueryApiImplBase {
return tasks;
}
- private static final Comparator comparator =
- Comparator.comparing(RpcDecoratedResultItem::getRankingScore);
private boolean isBlacklisted(RpcDecoratedResultItem item) {
return blacklist.isBlacklisted(UrlIdCodec.getDomainId(item.getRawItem().getCombinedId()));