Merge pull request 'fix: V2 캐시 조회 시 누락 MMSI DB fallback 추가' (#49) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m48s

This commit is contained in:
htlee 2026-02-19 22:53:19 +09:00
커밋 9f98682347

파일 보기

@ -360,7 +360,7 @@ public class GisServiceV2 {
}
}
// 3-a. hourly 범위 L2 캐시 DB fallback
// 3-a. hourly 범위 L2 캐시 DB fallback (누락 MMSI 부분 fallback 포함)
if (split.hasHourlyRange()) {
DailyTrackCacheManager.DateRange hr = split.getHourlyRange();
Map<String, List<VesselTrack>> hourlyTracks =
@ -373,6 +373,19 @@ public class GisServiceV2 {
int totalPts = converted.stream().mapToInt(CompactVesselTrack::getPointCount).sum();
log.info("[CACHE-MONITOR] queryWithCache L2 HIT [{}, {}): cacheVessels={}, filteredVessels={}, compactTracks={}, points={}",
hr.getStart(), hr.getEnd(), hourlyTracks.size(), filtered.size(), converted.size(), totalPts);
// 캐시에 없는 MMSI DB fallback
Set<String> missingMmsis = new HashSet<>(requestedMmsis);
missingMmsis.removeAll(filtered.keySet());
if (!missingMmsis.isEmpty()) {
VesselTracksRequest fallbackReq = VesselTracksRequest.builder()
.startTime(hr.getStart()).endTime(hr.getEnd())
.vessels(new ArrayList<>(missingMmsis)).build();
List<CompactVesselTrack> dbResult = gisService.getVesselTracks(fallbackReq);
allTracks.addAll(dbResult);
log.info("[CACHE-MONITOR] queryWithCache L2 PARTIAL → DB fallback: cacheHit={}, cacheMiss={}, dbTracks={}",
filtered.size(), missingMmsis.size(), dbResult.size());
}
} else {
VesselTracksRequest hourlyReq = VesselTracksRequest.builder()
.startTime(hr.getStart()).endTime(hr.getEnd())
@ -384,7 +397,7 @@ public class GisServiceV2 {
}
}
// 3-b. 5min 범위 L1 캐시 DB fallback
// 3-b. 5min 범위 L1 캐시 DB fallback (누락 MMSI 부분 fallback 포함)
if (split.hasFiveMinRange()) {
DailyTrackCacheManager.DateRange fr = split.getFiveMinRange();
Map<String, List<VesselTrack>> fiveMinTracks =
@ -397,6 +410,19 @@ public class GisServiceV2 {
int totalPts = converted.stream().mapToInt(CompactVesselTrack::getPointCount).sum();
log.info("[CACHE-MONITOR] queryWithCache L1 HIT [{}, {}): cacheVessels={}, filteredVessels={}, compactTracks={}, points={}",
fr.getStart(), fr.getEnd(), fiveMinTracks.size(), filtered.size(), converted.size(), totalPts);
// 캐시에 없는 MMSI DB fallback
Set<String> missingMmsis = new HashSet<>(requestedMmsis);
missingMmsis.removeAll(filtered.keySet());
if (!missingMmsis.isEmpty()) {
VesselTracksRequest fallbackReq = VesselTracksRequest.builder()
.startTime(fr.getStart()).endTime(fr.getEnd())
.vessels(new ArrayList<>(missingMmsis)).build();
List<CompactVesselTrack> dbResult = gisService.getVesselTracks(fallbackReq);
allTracks.addAll(dbResult);
log.info("[CACHE-MONITOR] queryWithCache L1 PARTIAL → DB fallback: cacheHit={}, cacheMiss={}, dbTracks={}",
filtered.size(), missingMmsis.size(), dbResult.size());
}
} else {
VesselTracksRequest fiveMinReq = VesselTracksRequest.builder()
.startTime(fr.getStart()).endTime(fr.getEnd())