Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions Server/src/main/java/org/openas2/BaseSession.java
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,38 @@ public void destroyPartnershipPollers(String configSourceFilter) {
}
}

/**
* Synchronously stop and untrack the poller for a single named partnership, if one is
* currently registered. Used when a partnership is deleted outside of a full config
* reload (e.g. via the REST API) so that its outbox directory is freed up immediately
* rather than waiting for the next scheduled partnerships file refresh.
*
* @param partnershipName - name attribute value for the partnership whose poller should be destroyed
*/
public void destroyPartnershipPoller(String partnershipName) {
String pollerKeyToRemove = null;
for (Map.Entry<String, Map<String, Object>> entry : polledDirectories.entrySet()) {
Map<String, Object> meta = entry.getValue();
if (partnershipName.equals(meta.get("partnershipName"))) {
DirectoryPollingModule poller = (DirectoryPollingModule) meta.get("pollerInstance");
try {
LOGGER.trace("Destroying poller for deleted partnership " + partnershipName + ":" + meta);
if (poller.isRunning()) {
poller.stop();
}
} catch (Exception e) {
LOGGER.error("Failed to stop the partnership poller for partnership " + partnershipName + ": " + meta, e);
}
pollerKeyToRemove = entry.getKey();
break;
}
}
if (pollerKeyToRemove != null) {
polledDirectories.remove(pollerKeyToRemove);
LOGGER.trace("Removed poller from cache map:" + pollerKeyToRemove);
}
}

public DirectoryPollingModule getPartnershipPoller(String partnershipName) {
for (Map.Entry<String, Map<String, Object>> entry : polledDirectories.entrySet()) {
Map<String, Object> meta = entry.getValue();
Expand Down
1 change: 1 addition & 0 deletions Server/src/main/java/org/openas2/Session.java
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ public interface Session {

public void startPartnershipPollers() throws OpenAS2Exception;
public void destroyPartnershipPollers(String configSourceFilter);
public void destroyPartnershipPoller(String partnershipName);

String getBaseDirectory();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public CommandResult execute(PartnershipFactory partFx, Object[] params) throws
if (!((XMLPartnershipFactory) partFx).deleteElement("/partnerships/partnership[@name='" + name + "']")) {
return new CommandResult(CommandResult.TYPE_ERROR, "Partnership delete failed in XML document for partnership name: " + name);
}
partFx.getSession().destroyPartnershipPoller(name);
return new CommandResult(CommandResult.TYPE_OK);
}
}
Expand Down
Loading