From 85e946e076184ce6166cf07f66190ac1f3f59475 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Tue, 18 Dec 2018 23:55:32 +0000
Subject: [PATCH] Queuing...
---
borgbutler-core/src/main/java/de/micromata/borgbutler/BorgExecutorQueue.java | 32 ++++++++++++++++++++++++++++----
1 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgExecutorQueue.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgExecutorQueue.java
index 421a0c3..37c024c 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgExecutorQueue.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgExecutorQueue.java
@@ -13,23 +13,41 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.naming.Context;
import java.io.IOException;
import java.io.OutputStream;
+import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentLinkedQueue;
+/**
+ * A queue is important because Borg doesn't support parallel calls for one repository.
+ * For each repository one single queue is allocated.
+ */
public class BorgExecutorQueue {
private Logger log = LoggerFactory.getLogger(BorgExecutorQueue.class);
- private static BorgExecutorQueue instance = new BorgExecutorQueue();
+ // key is the repo name.
+ private static Map<String, BorgExecutorQueue> queueMap = new HashMap<>();
- public static BorgExecutorQueue getInstance() {
- return instance;
+ public static BorgExecutorQueue getQueue(BorgRepoConfig config) {
+ synchronized (queueMap) {
+ BorgExecutorQueue queue = queueMap.get(config.getRepo());
+ if (queue == null) {
+ queue = new BorgExecutorQueue();
+ queueMap.put(config.getRepo(), queue);
+ }
+ return queue;
+ }
}
private ConcurrentLinkedQueue<BorgCommand> commandQueue = new ConcurrentLinkedQueue<>();
public String execute(BorgCommand command) {
+ synchronized (this) {
+ return _exceute(command);
+ }
+ }
+
+ private String _exceute(BorgCommand command) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
execute(outputStream, command);
String json = outputStream.toString(Definitions.STD_CHARSET);
@@ -37,6 +55,12 @@
}
public void execute(OutputStream outputStream, BorgCommand command) {
+ synchronized (this) {
+ _execute(outputStream, command);
+ }
+ }
+
+ private void _execute(OutputStream outputStream, BorgCommand command) {
CommandLine cmdLine = new CommandLine(ConfigurationHandler.getConfiguration().getBorgCommand());
cmdLine.addArgument(command.command);
if (command.params != null) {
--
Gitblit v1.10.0