From e74ac281653549da8a91d5c11da70efc398f00ac Mon Sep 17 00:00:00 2001 From: Michel Jung Date: Fri, 22 Sep 2017 15:42:04 +0200 Subject: [PATCH 1/3] Lazy fetch achievements from statistics --- src/main/java/com/faforever/api/data/DataController.java | 2 +- .../com/faforever/api/data/domain/AchievementStatistics.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/faforever/api/data/DataController.java b/src/main/java/com/faforever/api/data/DataController.java index 0a8ab2b22..44a9a09e7 100644 --- a/src/main/java/com/faforever/api/data/DataController.java +++ b/src/main/java/com/faforever/api/data/DataController.java @@ -114,7 +114,7 @@ private ResponseEntity wrapResponse(ElideResponse response) { return ResponseEntity.status(response.getResponseCode()).body(response.getBody()); } - private String getJsonApiPath(HttpServletRequest request) { + private static String getJsonApiPath(HttpServletRequest request) { return ((String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE)).replace(PATH_PREFIX, ""); } diff --git a/src/main/java/com/faforever/api/data/domain/AchievementStatistics.java b/src/main/java/com/faforever/api/data/domain/AchievementStatistics.java index e6aadaa0c..1c2c86c7f 100644 --- a/src/main/java/com/faforever/api/data/domain/AchievementStatistics.java +++ b/src/main/java/com/faforever/api/data/domain/AchievementStatistics.java @@ -6,6 +6,7 @@ import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToOne; @@ -33,7 +34,7 @@ public String getId() { return id; } - @OneToOne + @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "achievement_id") public Achievement getAchievement() { return achievement; From 2aa313770d09ca76e754727e3cfbbbe5a6f07289 Mon Sep 17 00:00:00 2001 From: Michel Jung Date: Fri, 22 Sep 2017 16:53:42 +0200 Subject: [PATCH 2/3] Use JOIN instead of SELECT for resolving achievement statistics --- src/main/java/com/faforever/api/data/domain/Achievement.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/faforever/api/data/domain/Achievement.java b/src/main/java/com/faforever/api/data/domain/Achievement.java index 508d089b9..0ef33b586 100644 --- a/src/main/java/com/faforever/api/data/domain/Achievement.java +++ b/src/main/java/com/faforever/api/data/domain/Achievement.java @@ -11,7 +11,6 @@ import javax.persistence.EntityListeners; import javax.persistence.EnumType; import javax.persistence.Enumerated; -import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.Table; @@ -122,7 +121,8 @@ public OffsetDateTime getUpdateTime() { return updateTime; } - @OneToOne(mappedBy = "achievement", fetch = FetchType.LAZY) + // Fetching eagerly for cheaper JOIN instead of expensive SELECT (each achievement statistics select costs about 1s) + @OneToOne(mappedBy = "achievement") public AchievementStatistics getStatistics() { return statistics; } From cfe0cd64a9e81efe714d1c1b711be3db76f584d4 Mon Sep 17 00:00:00 2001 From: Michel Jung Date: Fri, 22 Sep 2017 16:55:54 +0200 Subject: [PATCH 3/3] Bump version to 0.8.5 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index bd2959165..b4fe49c09 100644 --- a/build.gradle +++ b/build.gradle @@ -109,7 +109,7 @@ apply plugin: 'org.springframework.boot' apply plugin: 'propdeps' group = 'faforever' -version = '0.8.4' +version = '0.8.5' sourceCompatibility = 1.8 targetCompatibility = 1.8