Class DiffExGeneWarmupService

java.lang.Object
ubic.gemma.core.analysis.expression.diff.DiffExGeneWarmupService

@Service public class DiffExGeneWarmupService extends Object
Periodic warm-up of the DEA "find results by gene" path. The hot endpoint /datasets/analyses/differential/results/genes/{id} (in DatasetsWebService) calls DifferentialExpressionResultService.findByGeneAndExperimentAnalyzedIds(Gene, boolean, boolean, Collection, boolean, java.util.Map, java.util.Map, java.util.Map, double, boolean).

Cold-cache latency is ~4 s; warm latency ~0.55 s (round-3 perf probe, see DEA_FINDBYGENE_COLDCACHE_RECCE.md). The gap is InnoDB-page and Hibernate query-cache cold-start, not a plan or index problem. This service re-runs the call for a seed list of high-traffic genes on a fixed cadence so curator-facing requests land on a warm buffer pool.

The seed list and scheduling cadence are config-overridable (gemma.diffex.warmup.*). The discarded result intentionally streams through the same DAO path the endpoint uses; we are paying the I/O so a user doesn't have to.

Author:
pavlidis-lab (perf round-3, Strategy A)
  • Constructor Details

    • DiffExGeneWarmupService

      public DiffExGeneWarmupService()
  • Method Details

    • warmTopGenes

      @Scheduled(initialDelayString="${gemma.diffex.warmup.initialDelay:300000}", fixedDelayString="${gemma.diffex.warmup.fixedDelay:21600000}") public void warmTopGenes()
      Trigger one warm-up pass.

      Initial delay 5 minutes (avoid boot tax); then re-run every 6 hours because InnoDB pages do cycle out of the buffer pool under load. Schedule values are config-driven so ops can tune without a redeploy.