• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

decentraland / atlas-server
94%

Build:
DEFAULT BRANCH: master
Repo Added 13 Jan 2023 05:55PM UTC
Token SipBXdcBfPBxOdNjifDZ3pmj881y3Je3j regen
Build 254 Last
Files 52
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

LAST BUILD ON BRANCH master
branch: SELECT
CHANGE BRANCH
x
Sync Branches
  • No branch selected
  • 1.6.0
  • 1.7.0
  • 1.7.1
  • 1.7.2
  • 1.7.3
  • add-ai-agent-context-to-readme
  • chore/add-space
  • chore/bump-libs
  • chore/bump-node
  • chore/deps-and-image-hygiene
  • chore/enhance-docs
  • chore/migrate-to-core-components
  • chore/node-24.22.1
  • chore/pin-node-24-base-image
  • chore/readme-change
  • chore/trigger-deploy
  • chore/update-node-24
  • chore/update-node-to-24
  • docs/api
  • feat/add-release-job
  • feat/add-tracing-and-logging
  • feat/cache-tiles-s3
  • feat/cors
  • feat/feature-flag
  • feat/image-caching
  • feat/improve-atlas-cache
  • feat/instrument-http-requests-logger
  • feat/migrate-to-new-ci-infra
  • feat/redeploy-atlas-server
  • feat/remove-district-demarcation
  • feat/remove-district-tiles
  • feat/render-worker-pool
  • feat/sanitize-estates-id
  • feat/tiles-with-trades
  • feat/trigger-build
  • feat/trigger-deploy
  • feat/try-to-use-s3
  • feat/update-graph-component
  • feat/use-node-18-alpine
  • fix/add-console-update
  • fix/add-last-modified-tests
  • fix/cors-allow-origin-header
  • fix/estates-trades-not-showing
  • fix/expiration-date-lands
  • fix/filter-nulled-rental-listings
  • fix/http-and-rendering
  • fix/map-component-boot-and-stale-cache
  • fix/map-pipeline-state
  • fix/no-cache-on-last-updated
  • fix/parcel-updated-at
  • fix/re-trigger-deployment
  • fix/read-the-latest-block-instead-of-pinning
  • fix/remove-lastModifiedHeader-temporary
  • fix/remove-modified-middleware
  • fix/remove-old-infra-code
  • fix/rental-listing-calculation
  • fix/response-body-leaks-and-dcl-bump
  • fix/save-metrics-of-all-updates
  • fix/small-change
  • fix/subgraph-reads
  • fix/tiles-serving-and-infra
  • fix/trade-status-v3-semantics
  • fix/trigger-redeployment
  • fix/udpdate-deps
  • fix/ulimit
  • fix/update-dep
  • fix/update-rentals-with-milliseconds
  • fix/update-schemas
  • fix/updated-at-calculation-ms
  • fix/use-seconds
  • fix/workflow
  • fzavalia-patch-1
  • master
  • refs/heads/master
  • refs/tags/1.0.0
  • refs/tags/1.0.1
  • refs/tags/1.1.0
  • refs/tags/1.13.17
  • refs/tags/1.2.0
  • refs/tags/1.2.1
  • refs/tags/1.3.0
  • refs/tags/1.3.1
  • refs/tags/1.3.10
  • refs/tags/1.3.11
  • refs/tags/1.3.12
  • refs/tags/1.3.13
  • refs/tags/1.3.14
  • refs/tags/1.3.15
  • refs/tags/1.3.16
  • refs/tags/1.3.18
  • refs/tags/1.3.19
  • refs/tags/1.3.2
  • refs/tags/1.3.3
  • refs/tags/1.3.4
  • refs/tags/1.3.5
  • refs/tags/1.3.6
  • refs/tags/1.3.7
  • refs/tags/1.3.8
  • refs/tags/1.3.9
  • refs/tags/1.4.0
  • refs/tags/1.4.1
  • refs/tags/1.5.0
  • refs/tags/1.5.1
  • refs/tags/1.5.2
  • security/pin-github-actions-sha
  • test/coverage-and-server-harness

23 Oct 2026 01:15PM UTC coverage: 93.8% (+0.7%) from 93.105%
39959757456

push

github

web-flow
feat: cache the map images at the cdn and in memory (#156)

Stacked on #155 (base `feat/render-worker-pool`); retarget to `master`
once #155 merges.

**Problem.** Every PNG route was served with `public, max-age=120`
(minimap/estatemap 600) and Cloudflare keys on the full URL, so the same
deterministic images were re-rendered every couple of minutes. Clients
ask for a small fixed set: unity-explorer 49
`/v1/map.png?…&width=1020&height=1020&size=20` URLs per session (no disk
cache), bevy-explorer ~400 grid-snapped `768x768&size=16` ones,
places/discovery/marketplace thumbnails per-place
`/v2/map.png?…selected=…` and per-parcel/estate `map.png`.

**Changes**
- Every image has a data-derived version, the same on every replica:
images without `on-sale`/`listed-for-rent` follow a **land version**
(fingerprint of tile types, estates and borders; unchanged by prices,
orders, rentals), images with them an **overlay version** (land version
+ each listed tile's price, order expiration and rental expiration).
Both are in `/v2/tiles/info` (`landVersion`, `overlayVersion`);
`lastUpdatedAt` is unchanged.
- 200s carry a weak `ETag` (`W/"<version>-<hash of the normalized
request>"`) and `public, max-age=60, s-maxage=300,
stale-while-revalidate=86400`; no `Last-Modified`, so revalidation is by
`If-None-Match` (lists, weak, `*`), answered with a 304 before any
render slot is taken. `?v=` equal to the image's version gets `public,
max-age=31536000, immutable`; any other `v` is served normally. The PNG
routes no longer go through the last-modified middleware. 400/500/503
keep their headers.
- Each PNG request takes one map snapshot (`getSnapshot()`: the served
tiles with both versions, captured together; records are swapped, never
changed) before any await, and the version, cache key, estate lookup and
render job all read from it, so an image always matches its ETag even if
the map refreshes while the render waits for a thread. Overlays are
drawn from the data alone; exp... (continued)

1721 of 1873 branches covered (91.88%)

Branch coverage included in aggregate %.

790 of 797 new or added lines in 16 files covered. (99.12%)

9 existing lines in 2 files now uncovered.

5586 of 5917 relevant lines covered (94.41%)

2215.95 hits per line

Relevant lines Covered
Build:
Build:
5917 RELEVANT LINES 5586 COVERED LINES
2215.95 HITS PER LINE
Source Files on master
  • Tree
  • List 52
  • Changed 36
  • Source Changed 13
  • Coverage Changed 36
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
39959757456 master feat: cache the map images at the cdn and in memory (#156) Stacked on #155 (base `feat/render-worker-pool`); retarget to `master` once #155 merges. **Problem.** Every PNG route was served with `public, max-age=120` (minimap/estatemap 600) and Cl... push 23 Oct 2026 01:17PM UTC web-flow github
93.8
39959056684 fix/read-the-latest-block-instead-of-pinning fix: lower the land cursor to the head of every page's backend Pull #157 23 Oct 2026 01:12PM UTC juanmahidalgo github
93.13
39957915429 feat/image-caching fix: render map images from the snapshot their etag names The version was read when a request arrived but the render job read the tiles later, once a thread freed, and the estate route read its version after awaiting the tiles, so a map refresh i... Pull #156 23 Oct 2026 01:03PM UTC LautaroPetaccio github
93.8
39955743425 feat/image-caching fix: version overlay images by their data and render a stable estatemap Overlay images still keyed on the wall-clock lastUpdatedAt, the estatemap numbered estates in whatever order a replica held its tiles, and IMAGE_CACHE_MAX_BYTES accepted valu... Pull #156 23 Oct 2026 12:47PM UTC LautaroPetaccio github
93.7
39954208919 feat/image-caching fix: revalidate cached map images and bound the image cache keys A one day s-maxage left overlays and ownership up to a day stale at the CDN, and the cache keys embedded the uncapped selection without being counted against the byte budget. - Unv... Pull #156 23 Oct 2026 12:35PM UTC LautaroPetaccio github
93.71
39940855968 fix/read-the-latest-block-instead-of-pinning fix: read the land at the latest block instead of pinning it Pull #157 23 Oct 2026 10:42AM UTC juanmahidalgo github
93.08
39886277284 feat/image-caching Merge remote-tracking branch 'origin/feat/render-worker-pool' into feat/image-caching Pull #156 23 Oct 2026 01:52AM UTC LautaroPetaccio github
93.44
39885013105 feat/render-worker-pool fix: count render failures and test the pool's thread lifecycle Worker crashes mid-render (e.g. out of memory under resourceLimits) were only logged. Every failure path now increments dcl_map_render_errors_total{kind, reason}, with reason one of ... Pull #155 23 Oct 2026 01:38AM UTC LautaroPetaccio github
93.12
39866997711 feat/render-worker-pool fix: tighten the render pool's stop, abort, sizing and metrics - A render is tracked as soon as it is admitted, so stop() waits for one admitted right before it instead of failing it with a 503. - A client that leaves while its job is built no ... Pull #155 22 Oct 2026 10:46PM UTC LautaroPetaccio github
93.07
39845063126 feat/render-worker-pool feat: render the map images in a worker pool node-canvas draws and encodes synchronously on the main thread, so a large map.png held the event loop for 100-160 ms and stalled health checks and every other route. The render limiter could only queu... Pull #155 22 Oct 2026 08:02PM UTC LautaroPetaccio github
93.29
See All Builds (213)

Badge your Repo: atlas-server

We detected this repo isn’t badged! Grab the embed code to the right, add it to your repo to show off your code coverage, and when the badge is live hit the refresh button to remove this message.

Could not find badge in README.

Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

Refresh
  • Settings
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc