From 02cf45bbd9d9ac90495879982f85bf414c793727 Mon Sep 17 00:00:00 2001 From: Petr Sloup Date: Wed, 20 Sep 2017 08:01:35 +0200 Subject: [PATCH 1/8] Clean Dockerfile by basing on node:6-stretch --- Dockerfile | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 401c44f..3c9083c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:stretch +FROM node:6-stretch MAINTAINER Petr Sloup RUN apt-get -qq update \ @@ -15,12 +15,6 @@ RUN apt-get -qq update \ libprotobuf-dev \ libxxf86vm-dev \ xvfb \ -&& echo "deb https://deb.nodesource.com/node_6.x stretch main" >> /etc/apt/sources.list.d/nodejs.list \ -&& echo "deb-src https://deb.nodesource.com/node_6.x stretch main" >> /etc/apt/sources.list.d/nodejs.list \ -&& apt-get -qq update \ -&& DEBIAN_FRONTEND=noninteractive apt-get -y --allow-unauthenticated install \ - nodejs \ -&& rm /etc/apt/sources.list.d/nodejs.list \ && apt-get clean RUN mkdir -p /usr/src/app From d60996e3c6e59024e606388dc892a9cf73a334fe Mon Sep 17 00:00:00 2001 From: Petr Sloup Date: Wed, 20 Sep 2017 08:03:46 +0200 Subject: [PATCH 2/8] Reorganize Dockerfile instructions for faster rebuilds --- Dockerfile | 14 ++++++-------- Dockerfile_light | 14 ++++++-------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3c9083c..f576660 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,12 @@ FROM node:6-stretch MAINTAINER Petr Sloup +ENV NODE_ENV="production" +VOLUME /data +WORKDIR /data +EXPOSE 80 +ENTRYPOINT ["/usr/src/app/run.sh"] + RUN apt-get -qq update \ && DEBIAN_FRONTEND=noninteractive apt-get -y install \ apt-transport-https \ @@ -20,11 +26,3 @@ RUN apt-get -qq update \ RUN mkdir -p /usr/src/app COPY / /usr/src/app RUN cd /usr/src/app && npm install --production - -VOLUME /data -WORKDIR /data - -ENV NODE_ENV="production" - -EXPOSE 80 -ENTRYPOINT ["/usr/src/app/run.sh"] diff --git a/Dockerfile_light b/Dockerfile_light index bd4d6b3..b3926ee 100644 --- a/Dockerfile_light +++ b/Dockerfile_light @@ -1,14 +1,12 @@ FROM node:6 MAINTAINER Petr Sloup +ENV NODE_ENV="production" +EXPOSE 80 +VOLUME /data +WORKDIR /data +ENTRYPOINT ["node", "/usr/src/app/", "-p", "80"] + RUN mkdir -p /usr/src/app COPY / /usr/src/app RUN cd /usr/src/app && npm install --production - -VOLUME /data -WORKDIR /data - -ENV NODE_ENV="production" - -EXPOSE 80 -ENTRYPOINT ["node", "/usr/src/app/", "-p", "80"] From da646868c3d610a8612e8302dc391502d077d3bb Mon Sep 17 00:00:00 2001 From: Petr Sloup Date: Wed, 20 Sep 2017 08:05:10 +0200 Subject: [PATCH 3/8] Wait longer for xvfb to start up (#197) --- run.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/run.sh b/run.sh index 4ee9aa2..1e10067 100755 --- a/run.sh +++ b/run.sh @@ -1,6 +1,7 @@ #!/bin/bash start-stop-daemon --start --pidfile ~/xvfb.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 1024x768x24 -ac +extension GLX +render -noreset -sleep 1 +echo "Waiting 3 seconds for xvfb to start..." +sleep 3 export DISPLAY=:99.0 From ea408f8ec99b2daaed99ab199bb902dbeae4fe9c Mon Sep 17 00:00:00 2001 From: Petr Sloup Date: Wed, 20 Sep 2017 08:21:34 +0200 Subject: [PATCH 4/8] Increase test timeout since travis can be slow on cold start when under load --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2c9494a..dd43927 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "node": ">=6 <7" }, "scripts": { - "test": "mocha test/**.js" + "test": "mocha test/**.js --timeout 10000" }, "dependencies": { "@mapbox/mapbox-gl-native": "3.5.4", From 440775dbbfe64001a5b08ac8dbe75109ebc922b4 Mon Sep 17 00:00:00 2001 From: Petr Sloup Date: Mon, 25 Sep 2017 13:23:05 +0200 Subject: [PATCH 5/8] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 974ecff..cecb1e0 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ Vector and raster maps with GL styles. Server side rendering by Mapbox GL Native ## Get Started +Make sure you have Node.js version **6** installed (running `node -v` it should output something like `v6.11.3`). + Install `tileserver-gl` with server-side raster rendering of vector tiles with npm ```bash From ac948b6deed4463ad059ce6611da90ea087cc95b Mon Sep 17 00:00:00 2001 From: Petr Pridal Date: Thu, 28 Sep 2017 00:53:05 +0200 Subject: [PATCH 6/8] Create ISSUE_TEMPLATE.md --- ISSUE_TEMPLATE.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 ISSUE_TEMPLATE.md diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..dfd17a0 --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,19 @@ +It is great you want to help us making TileServer GL project better! + +This is the right place only for a software bug report or a new software feature request. + +The usage and installation questions belongs to https://stackoverflow.com/questions/tagged/openmaptiles +A guaranteed support and consulting from the core developers via https://openmaptiles.com/support/ + +Please search this GitHub repo for similar requests before posting (check also closed tickets). + +When reporting a problem you have with the TileServer GL software please provide: + +- Clear description of the problem: What steps will lead to reproducing the error on our computer? What is exactly wrong? +- Version of the TileServer GL software you have used +- Version and name of the operating system you use or other details of your setup +- Information about your used config / styles / vector tiles +- URL / link to the specific location in a live map demo where a bug is visible is always great +- Screenshot of the problem are cool! Drag&drop an image to the report here... + +We love pull requests! If you are able to code, please send us your fix or code modification via GitHub... Thanks! From 89878015bb981aca5856d9f0328f778f493f104a Mon Sep 17 00:00:00 2001 From: Osmo Salomaa Date: Sun, 1 Oct 2017 18:40:16 +0300 Subject: [PATCH 7/8] Make raster tile renderer pool sizes configurable --- docs/config.rst | 21 +++++++++++++++++++++ src/serve_rendered.js | 19 ++++++++----------- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/docs/config.rst b/docs/config.rst index 2fe09b4..15f7db1 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -95,6 +95,27 @@ Maximum image side length to be allowed to be rendered (including scale factor). Be careful when changing this value since there are hardware limits that need to be considered. Default is ``2048``. +``minRendererPoolSizes`` +------------------------ + +Minimum amount of raster tile renderers per scale factor. +The value is an array: the first element is the minimum amount of renderers for scale factor one, the second for scale factor two and so on. +If the array has less elements than ``maxScaleFactor``, then the last element is used for all remaining scale factors as well. +Selecting renderer pool sizes is a trade-off between memory use and speed. +A reasonable value will depend on your hardware and your amount of styles and scale factors. +If you have plenty of memory, you'll want to set this equal to ``maxRendererPoolSizes`` to avoid increased latency due to renderer destruction and recreation. +If you need to conserve memory, you'll want something lower than ``maxRendererPoolSizes``, possibly allocating more renderers to scale factors that are more common. +Default is ``[8, 4, 2]``. + +``maxRendererPoolSizes`` +------------------------ + +Maximum amount of raster tile renderers per scale factor. +The value and considerations are similar to ``minRendererPoolSizes`` above. +If you have plenty of memory, try setting these equal to or slightly above your processor count, e.g. if you have four processors, try a value of ``[6]``. +If you need to conserve memory, try lower values for scale factors that are less common. +Default is ``[16, 8, 4]``. + ``watermark`` ----------- diff --git a/src/serve_rendered.js b/src/serve_rendered.js index 435b0c5..9ca4b6c 100644 --- a/src/serve_rendered.js +++ b/src/serve_rendered.js @@ -344,18 +344,15 @@ module.exports = function(options, repo, params, id, dataResolver) { }); var renderersReadyPromise = Promise.all(queue).then(function() { - // TODO: make pool sizes configurable + // standard and @2x tiles are much more usual -> default to larger pools + var minPoolSizes = options.minRendererPoolSizes || [8, 4, 2]; + var maxPoolSizes = options.maxRendererPoolSizes || [16, 8, 4]; for (var s = 1; s <= maxScaleFactor; s++) { - var minPoolSize = 2; - - // standard and @2x tiles are much more usual -> create larger pools - if (s <= 2) { - minPoolSize *= 2; - if (s <= 1) { - minPoolSize *= 2; - } - } - map.renderers[s] = createPool(s, minPoolSize, 2 * minPoolSize); + var i = Math.min(minPoolSizes.length - 1, s - 1); + var j = Math.min(maxPoolSizes.length - 1, s - 1); + var minPoolSize = minPoolSizes[i]; + var maxPoolSize = Math.max(minPoolSize, maxPoolSizes[j]); + map.renderers[s] = createPool(s, minPoolSize, maxPoolSize); } }); From 82f179b07c67caa5bc90878e0e0eb9b662a837f5 Mon Sep 17 00:00:00 2001 From: Petr Sloup Date: Mon, 2 Oct 2017 13:56:32 +0200 Subject: [PATCH 8/8] Minor fix for correctly serving empty responses for missing tiles --- src/serve_rendered.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/serve_rendered.js b/src/serve_rendered.js index 9ca4b6c..10ef459 100644 --- a/src/serve_rendered.js +++ b/src/serve_rendered.js @@ -164,6 +164,7 @@ module.exports = function(options, repo, params, id, dataResolver) { var parts = req.url.split('/'); var sourceId = parts[2]; var source = map.sources[sourceId]; + var sourceInfo = styleJSON.sources[sourceId]; var z = parts[3] | 0, x = parts[4] | 0, y = parts[5].split('.')[0] | 0, @@ -171,7 +172,7 @@ module.exports = function(options, repo, params, id, dataResolver) { source.getTile(z, x, y, function(err, data, headers) { if (err) { //console.log('MBTiles error, serving empty', err); - createEmptyResponse(source.format, source.color, callback); + createEmptyResponse(sourceInfo.format, sourceInfo.color, callback); return; }