Skip to content

Commit f1f37b4

Browse files
committed
Polishing.
Add milestone caching. See #69
1 parent a65c641 commit f1f37b4

File tree

1 file changed

+25
-8
lines changed
  • src/main/java/org/springframework/data/release/issues/github

1 file changed

+25
-8
lines changed

Diff for: src/main/java/org/springframework/data/release/issues/github/GitHub.java

+25-8
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import org.springframework.http.ResponseEntity;
5353
import org.springframework.stereotype.Component;
5454
import org.springframework.util.Assert;
55+
import org.springframework.util.ConcurrentReferenceHashMap;
5556
import org.springframework.web.client.HttpStatusCodeException;
5657

5758
/**
@@ -82,6 +83,8 @@ public class GitHub extends GitHubSupport implements IssueTracker {
8283
private static final ParameterizedTypeReference<GitHubWorkflows> WORKFLOWS_TYPE = new ParameterizedTypeReference<GitHubWorkflows>() {};
8384
private static final Map<TicketType, Label> TICKET_LABELS = new HashMap<>();
8485

86+
private final Map<ModuleIteration, Optional<Milestone>> milestoneCache = new ConcurrentReferenceHashMap<>();
87+
8588
static {
8689

8790
TICKET_LABELS.put(TicketType.Task, LabelConfiguration.TYPE_TASK);
@@ -210,7 +213,7 @@ public void createReleaseVersion(ModuleIteration moduleIteration) {
210213
Assert.notNull(moduleIteration, "ModuleIteration must not be null.");
211214

212215
String repositoryName = GitProject.of(moduleIteration.getProject()).getRepositoryName();
213-
Optional<Milestone> milestone = findMilestone(moduleIteration, repositoryName);
216+
Optional<Milestone> milestone = findMilestone(moduleIteration);
214217

215218
if (milestone.isPresent()) {
216219
return;
@@ -269,7 +272,7 @@ private Ticket doCreateTicket(ModuleIteration moduleIteration, String text, Tick
269272
boolean assignToCurrentUser) {
270273

271274
String repositoryName = GitProject.of(moduleIteration.getProject()).getRepositoryName();
272-
Milestone milestone = getMilestone(moduleIteration, repositoryName);
275+
Milestone milestone = getMilestone(moduleIteration);
273276

274277
Label label = TICKET_LABELS.get(ticketType);
275278

@@ -381,8 +384,22 @@ private Map<String, Object> newUrlTemplateVariables() {
381384
return parameters;
382385
}
383386

384-
private Optional<Milestone> findMilestone(ModuleIteration moduleIteration, String repositoryName) {
385-
return doFindMilestone(moduleIteration, repositoryName, m -> m.matches(moduleIteration));
387+
private Optional<Milestone> findMilestone(ModuleIteration moduleIteration) {
388+
389+
// we're inside a cacheable object, so we cannot reuse Spring Caching for inner method calls.
390+
Optional<Milestone> milestone = milestoneCache.get(moduleIteration);
391+
if (milestone == null) {
392+
393+
String repositoryName = GitProject.of(moduleIteration.getProject()).getRepositoryName();
394+
milestone = doFindMilestone(moduleIteration, repositoryName, m -> m.matches(moduleIteration));
395+
396+
if(milestone.isPresent()) {
397+
milestoneCache.put(moduleIteration, milestone);
398+
}
399+
}
400+
401+
return milestone;
402+
386403
}
387404

388405
private Optional<Milestone> doFindMilestone(ModuleIteration moduleIteration, String repositoryName,
@@ -445,7 +462,7 @@ public void closeIteration(ModuleIteration module) {
445462

446463
GitProject project = GitProject.of(module.getProject());
447464

448-
findMilestone(module, project.getRepositoryName()) //
465+
findMilestone(module) //
449466
.filter(Milestone::isOpen) //
450467
.map(Milestone::markReleased) //
451468
.ifPresent(milestone -> {
@@ -749,7 +766,7 @@ private Stream<GitHubReadIssue> getIssuesFor(ModuleIteration moduleIteration, bo
749766

750767
String repositoryName = GitProject.of(moduleIteration.getProject()).getRepositoryName();
751768

752-
Optional<Milestone> optionalMilestone = findMilestone(moduleIteration, repositoryName);
769+
Optional<Milestone> optionalMilestone = findMilestone(moduleIteration);
753770

754771
if (ignoreMissingMilestone && !optionalMilestone.isPresent()) {
755772
return Stream.empty();
@@ -781,9 +798,9 @@ private Stream<GitHubReadIssue> getForIssues(String template, Map<String, Object
781798
return issues.stream();
782799
}
783800

784-
private Milestone getMilestone(ModuleIteration moduleIteration, String repositoryName) {
801+
private Milestone getMilestone(ModuleIteration moduleIteration) {
785802

786-
Optional<Milestone> milestone = findMilestone(moduleIteration, repositoryName);
803+
Optional<Milestone> milestone = findMilestone(moduleIteration);
787804

788805
return milestone.orElseThrow(() -> noSuchMilestone(moduleIteration));
789806
}

0 commit comments

Comments
 (0)