Skip to content

Commit 5e5bd08

Browse files
committed
Merge pull request #373 from UNC-Libraries/move-contention
Using ExecutorService to limit the number of simultaneous move operations
2 parents c4b105d + 1d8cb3b commit 5e5bd08

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

services/src/main/java/edu/unc/lib/dl/cdr/services/rest/modify/MoveObjectsController.java

+10-3
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.Map;
2323
import java.util.Map.Entry;
2424
import java.util.UUID;
25+
import java.util.concurrent.ExecutorService;
2526

2627
import javax.servlet.http.HttpServletResponse;
2728

@@ -54,6 +55,9 @@ public class MoveObjectsController {
5455

5556
private final Map<String, MoveRequest> moveRequests;
5657

58+
@Autowired
59+
private ExecutorService moveExecutor;
60+
5761
public MoveObjectsController() {
5862
moveRequests = new HashMap<>();
5963
}
@@ -72,10 +76,10 @@ Map<String, Object> moveObjects(@RequestBody MoveRequest moveRequest, HttpServle
7276

7377
moveRequest.setUser(GroupsThreadStore.getUsername());
7478

75-
Thread moveThread = new Thread(new MoveRunnable(moveRequest, GroupsThreadStore.getGroups()));
76-
log.info("User {} is starting move operation of {} objects to destination {}",
79+
MoveRunnable runnable = new MoveRunnable(moveRequest, GroupsThreadStore.getGroups());
80+
log.info("User {} is queuing move operation of {} objects to destination {}",
7781
new Object[] { GroupsThreadStore.getUsername(), moveRequest.moved.size(), moveRequest.getDestination()});
78-
moveThread.start();
82+
moveExecutor.submit(runnable);
7983

8084
response.setStatus(200);
8185

@@ -212,6 +216,9 @@ public MoveRunnable(MoveRequest request, AccessGroupSet groups) {
212216
@Override
213217
public void run() {
214218
try {
219+
log.info("Move of {} objects to {} for user {} has begun", new Object[] {
220+
request.getMoved().size(), request.getDestination(), request.getUser() });
221+
215222
moveRequests.put(request.getId(), request);
216223

217224
GroupsThreadStore.storeGroups(groups);

services/src/main/webapp/WEB-INF/service-context.xml

+4
Original file line numberDiff line numberDiff line change
@@ -225,4 +225,8 @@
225225
<constructor-arg value="${data.dir}"/>
226226
</bean>
227227

228+
<bean id="moveExecutor" class="java.util.concurrent.Executors"
229+
factory-method="newFixedThreadPool" destroy-method="shutdownNow">
230+
<constructor-arg value="${services.move.workers:1}"/>
231+
</bean>
228232
</beans>

0 commit comments

Comments
 (0)