Skip to content

Commit f521540

Browse files
authored
Allow renderd* sections to follow map sections in renderd.conf (#308)
* Allow `renderd*` sections to precede `map` sections in config file * Adding test * astyle formatting
1 parent be0d5fe commit f521540

4 files changed

Lines changed: 114 additions & 69 deletions

File tree

src/daemon.c

Lines changed: 74 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -803,25 +803,26 @@ int main(int argc, char **argv)
803803

804804
g_logger(G_LOG_LEVEL_INFO, "Rendering daemon started (version %s)", VERSION);
805805

806+
g_logger(G_LOG_LEVEL_INFO, "Initialising request queue");
806807
render_request_queue = request_queue_init();
807808

808809
if (render_request_queue == NULL) {
809810
g_logger(G_LOG_LEVEL_CRITICAL, "Failed to initialise request queue");
810811
exit(1);
811812
}
812813

813-
g_logger(G_LOG_LEVEL_INFO, "Initialising request_queue");
814-
815814
xmlconfigitem maps[XMLCONFIGS_MAX];
816815
bzero(maps, sizeof(xmlconfigitem) * XMLCONFIGS_MAX);
817816

818817
renderd_config config_slaves[MAX_SLAVES];
819818
bzero(config_slaves, sizeof(renderd_config) * MAX_SLAVES);
820819
bzero(&config, sizeof(renderd_config));
821820

821+
g_logger(G_LOG_LEVEL_INFO, "Parsing config file: %s", config_file_name);
822822
dictionary *ini = iniparser_load(config_file_name);
823823

824-
if (! ini) {
824+
if (!ini) {
825+
g_logger(G_LOG_LEVEL_CRITICAL, "Failed to load config file: %s", config_file_name);
825826
exit(1);
826827
}
827828

@@ -830,19 +831,86 @@ int main(int argc, char **argv)
830831
int iconf = -1;
831832
char buffer[PATH_MAX];
832833

834+
g_logger(G_LOG_LEVEL_DEBUG, "Parsing renderd config section(s)");
835+
836+
for (int section = 0; section < iniparser_getnsec(ini); section++) {
837+
const char *name = iniparser_getsecname(ini, section);
838+
839+
if (strncmp(name, "renderd", 7) == 0) {
840+
/* this is a renderd config section */
841+
int render_sec = 0;
842+
843+
if (sscanf(name, "renderd%i", &render_sec) != 1) {
844+
render_sec = 0;
845+
}
846+
847+
g_logger(G_LOG_LEVEL_DEBUG, "Parsing renderd config section %i: %s", render_sec, name);
848+
849+
if (render_sec >= MAX_SLAVES) {
850+
g_logger(G_LOG_LEVEL_CRITICAL, "Can't handle more than %i renderd config sections",
851+
MAX_SLAVES);
852+
exit(7);
853+
}
854+
855+
snprintf(buffer, sizeof(buffer), "%s:socketname", name);
856+
config_slaves[render_sec].socketname = iniparser_getstring(ini,
857+
buffer, (char *) RENDER_SOCKET);
858+
snprintf(buffer, sizeof(buffer), "%s:iphostname", name);
859+
config_slaves[render_sec].iphostname = iniparser_getstring(ini,
860+
buffer, "");
861+
snprintf(buffer, sizeof(buffer), "%s:ipport", name);
862+
config_slaves[render_sec].ipport = iniparser_getint(ini, buffer, 0);
863+
snprintf(buffer, sizeof(buffer), "%s:num_threads", name);
864+
config_slaves[render_sec].num_threads = iniparser_getint(ini,
865+
buffer, NUM_THREADS);
866+
snprintf(buffer, sizeof(buffer), "%s:tile_dir", name);
867+
config_slaves[render_sec].tile_dir = iniparser_getstring(ini,
868+
buffer, (char *) HASH_PATH);
869+
snprintf(buffer, sizeof(buffer), "%s:stats_file", name);
870+
config_slaves[render_sec].stats_filename = iniparser_getstring(ini,
871+
buffer, NULL);
872+
snprintf(buffer, sizeof(buffer), "%s:pid_file", name);
873+
config_slaves[render_sec].pid_filename = iniparser_getstring(ini,
874+
buffer, (char *) PIDFILE);
875+
876+
if (render_sec == active_slave) {
877+
config.socketname = config_slaves[render_sec].socketname;
878+
config.iphostname = config_slaves[render_sec].iphostname;
879+
config.ipport = config_slaves[render_sec].ipport;
880+
config.num_threads = config_slaves[render_sec].num_threads;
881+
config.tile_dir = config_slaves[render_sec].tile_dir;
882+
config.stats_filename
883+
= config_slaves[render_sec].stats_filename;
884+
config.pid_filename
885+
= config_slaves[render_sec].pid_filename;
886+
config.mapnik_plugins_dir = iniparser_getstring(ini,
887+
"mapnik:plugins_dir", (char *) MAPNIK_PLUGINS);
888+
config.mapnik_font_dir = iniparser_getstring(ini,
889+
"mapnik:font_dir", (char *) FONT_DIR);
890+
config.mapnik_font_dir_recurse = iniparser_getboolean(ini,
891+
"mapnik:font_dir_recurse", FONT_RECURSE);
892+
} else {
893+
noSlaveRenders += config_slaves[render_sec].num_threads;
894+
}
895+
}
896+
}
897+
898+
g_logger(G_LOG_LEVEL_DEBUG, "Parsing map config section(s)");
899+
833900
for (int section = 0; section < iniparser_getnsec(ini); section++) {
834901
const char *name = iniparser_getsecname(ini, section);
835-
g_logger(G_LOG_LEVEL_INFO, "Parsing section %s", name);
836902

837903
if (strncmp(name, "renderd", 7) && strcmp(name, "mapnik")) {
838-
if (config.tile_dir == NULL) {
904+
/* this is a map config section */
905+
if (config.num_threads == NULL || config.tile_dir == NULL) {
839906
g_logger(G_LOG_LEVEL_CRITICAL, "No valid (active) renderd config section available");
840907
exit(7);
841908
}
842909

843-
/* this is a map section */
844910
iconf++;
845911

912+
g_logger(G_LOG_LEVEL_DEBUG, "Parsing map config section %i: %s", iconf, name);
913+
846914
if (iconf >= XMLCONFIGS_MAX) {
847915
g_logger(G_LOG_LEVEL_CRITICAL, "Config: more than %d configurations found", XMLCONFIGS_MAX);
848916
exit(7);
@@ -960,62 +1028,6 @@ int main(int argc, char **argv)
9601028
* as it is needed to configure mapniks number of connections
9611029
*/
9621030
maps[iconf].num_threads = config.num_threads;
963-
964-
} else if (strncmp(name, "renderd", 7) == 0) {
965-
int render_sec = 0;
966-
967-
if (sscanf(name, "renderd%i", &render_sec) != 1) {
968-
render_sec = 0;
969-
}
970-
971-
g_logger(G_LOG_LEVEL_INFO, "Parsing render section %i", render_sec);
972-
973-
if (render_sec >= MAX_SLAVES) {
974-
g_logger(G_LOG_LEVEL_CRITICAL, "Can't handle more than %i render sections",
975-
MAX_SLAVES);
976-
exit(7);
977-
}
978-
979-
snprintf(buffer, sizeof(buffer), "%s:socketname", name);
980-
config_slaves[render_sec].socketname = iniparser_getstring(ini,
981-
buffer, (char *) RENDER_SOCKET);
982-
snprintf(buffer, sizeof(buffer), "%s:iphostname", name);
983-
config_slaves[render_sec].iphostname = iniparser_getstring(ini,
984-
buffer, "");
985-
snprintf(buffer, sizeof(buffer), "%s:ipport", name);
986-
config_slaves[render_sec].ipport = iniparser_getint(ini, buffer, 0);
987-
snprintf(buffer, sizeof(buffer), "%s:num_threads", name);
988-
config_slaves[render_sec].num_threads = iniparser_getint(ini,
989-
buffer, NUM_THREADS);
990-
snprintf(buffer, sizeof(buffer), "%s:tile_dir", name);
991-
config_slaves[render_sec].tile_dir = iniparser_getstring(ini,
992-
buffer, (char *) HASH_PATH);
993-
snprintf(buffer, sizeof(buffer), "%s:stats_file", name);
994-
config_slaves[render_sec].stats_filename = iniparser_getstring(ini,
995-
buffer, NULL);
996-
snprintf(buffer, sizeof(buffer), "%s:pid_file", name);
997-
config_slaves[render_sec].pid_filename = iniparser_getstring(ini,
998-
buffer, (char *) PIDFILE);
999-
1000-
if (render_sec == active_slave) {
1001-
config.socketname = config_slaves[render_sec].socketname;
1002-
config.iphostname = config_slaves[render_sec].iphostname;
1003-
config.ipport = config_slaves[render_sec].ipport;
1004-
config.num_threads = config_slaves[render_sec].num_threads;
1005-
config.tile_dir = config_slaves[render_sec].tile_dir;
1006-
config.stats_filename
1007-
= config_slaves[render_sec].stats_filename;
1008-
config.pid_filename
1009-
= config_slaves[render_sec].pid_filename;
1010-
config.mapnik_plugins_dir = iniparser_getstring(ini,
1011-
"mapnik:plugins_dir", (char *) MAPNIK_PLUGINS);
1012-
config.mapnik_font_dir = iniparser_getstring(ini,
1013-
"mapnik:font_dir", (char *) FONT_DIR);
1014-
config.mapnik_font_dir_recurse = iniparser_getboolean(ini,
1015-
"mapnik:font_dir_recurse", FONT_RECURSE);
1016-
} else {
1017-
noSlaveRenders += config_slaves[render_sec].num_threads;
1018-
}
10191031
}
10201032
}
10211033

tests/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,10 @@ add_test(
103103
add_test(
104104
NAME start_renderd
105105
COMMAND ${BASH} -c "
106-
echo '${PROJECT_BINARY_DIR}/src/renderd --config ${PROJECT_BINARY_DIR}/tests/conf/renderd.conf --foreground > ${PROJECT_BINARY_DIR}/tests/logs/renderd.log 2>&1 &' > ${PROJECT_BINARY_DIR}/tests/renderd_start.sh
106+
echo '${PROJECT_BINARY_DIR}/src/renderd --config ${PROJECT_BINARY_DIR}/tests/conf/renderd.conf --foreground --slave 0 > ${PROJECT_BINARY_DIR}/tests/logs/renderd.log 2>&1 &' > ${PROJECT_BINARY_DIR}/tests/renderd_start.sh
107107
echo 'printf \${!} > ${PROJECT_BINARY_DIR}/tests/run/renderd.pid' >> ${PROJECT_BINARY_DIR}/tests/renderd_start.sh
108+
echo '${PROJECT_BINARY_DIR}/src/renderd --config ${PROJECT_BINARY_DIR}/tests/conf/renderd.conf --foreground --slave 1 > ${PROJECT_BINARY_DIR}/tests/logs/renderd1.log 2>&1 &' >> ${PROJECT_BINARY_DIR}/tests/renderd_start.sh
109+
echo 'printf \${!} > ${PROJECT_BINARY_DIR}/tests/run/renderd1.pid' >> ${PROJECT_BINARY_DIR}/tests/renderd_start.sh
108110
echo 'exit 0' >> ${PROJECT_BINARY_DIR}/tests/renderd_start.sh
109111
${BASH} ${PROJECT_BINARY_DIR}/tests/renderd_start.sh
110112
"
@@ -156,6 +158,7 @@ add_test(
156158
NAME stop_renderd
157159
COMMAND ${BASH} -c "
158160
${KILL_EXECUTABLE} $(${CAT_EXECUTABLE} run/renderd.pid) && ${RM} run/renderd.pid
161+
${KILL_EXECUTABLE} $(${CAT_EXECUTABLE} run/renderd1.pid) && ${RM} run/renderd1.pid
159162
"
160163
)
161164
add_test(

tests/httpd.conf.in

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,33 @@ Redirect /renderd-example-map/leaflet/leaflet.min.js https://unpkg.com/leaflet/d
3636
ModTileTileDir @PROJECT_BINARY_DIR@/tests/tiles
3737
</VirtualHost>
3838

39+
<VirtualHost *:8181>
40+
LoadTileConfigFile @PROJECT_BINARY_DIR@/tests/conf/renderd.conf
41+
ModTileBulkMode Off
42+
ModTileCacheDurationDirty 900
43+
ModTileCacheDurationLowZoom 9 518400
44+
ModTileCacheDurationMax 604800
45+
ModTileCacheDurationMediumZoom 13 86400
46+
ModTileCacheDurationMinimum 10800
47+
ModTileCacheLastModifiedFactor 0.20
48+
ModTileEnableStats On
49+
ModTileEnableTileThrottling Off
50+
ModTileEnableTileThrottlingXForward 0
51+
ModTileMaxLoadMissing 5
52+
ModTileMaxLoadOld 2
53+
ModTileMissingRequestTimeout 10
54+
ModTileRenderdSocketAddr 127.0.0.1 8881
55+
ModTileRequestTimeout 3
56+
ModTileThrottlingRenders 128 0.2
57+
ModTileThrottlingTiles 10000 1
58+
ModTileTileDir @PROJECT_BINARY_DIR@/tests/tiles
59+
</VirtualHost>
60+
3961
CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"
4062
ErrorLog logs/error_log
4163
Group @NOGROUP_NAME@
4264
Listen 8081
65+
Listen 8181
4366
LogLevel debug
4467
PidFile run/httpd.pid
4568
ServerName localhost

tests/renderd.conf.in

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
[renderd]
2-
pid_file=@PROJECT_BINARY_DIR@/tests/run/renderd.pid
3-
socketname=@PROJECT_BINARY_DIR@/tests/run/renderd.sock
4-
stats_file=@PROJECT_BINARY_DIR@/tests/run/renderd.stats
5-
tile_dir=@PROJECT_BINARY_DIR@/tests/tiles
6-
71
[mapnik]
82
font_dir_recurse=true
93
font_dir=@MAPNIK_FONTS_DIR@
@@ -13,3 +7,16 @@ plugins_dir=@MAPNIK_PLUGINS_DIR@
137
TILEDIR=@PROJECT_BINARY_DIR@/tests/tiles
148
URI=/tiles/renderd-example
159
XML=@PROJECT_BINARY_DIR@/tests/www/mapnik.xml
10+
11+
[renderd1]
12+
iphostname=127.0.0.1
13+
ipport=8881
14+
pid_file=@PROJECT_BINARY_DIR@/tests/run/renderd1.pid
15+
stats_file=@PROJECT_BINARY_DIR@/tests/run/renderd1.stats
16+
tile_dir=@PROJECT_BINARY_DIR@/tests/tiles
17+
18+
[renderd]
19+
pid_file=@PROJECT_BINARY_DIR@/tests/run/renderd.pid
20+
socketname=@PROJECT_BINARY_DIR@/tests/run/renderd.sock
21+
stats_file=@PROJECT_BINARY_DIR@/tests/run/renderd.stats
22+
tile_dir=@PROJECT_BINARY_DIR@/tests/tiles

0 commit comments

Comments
 (0)