Handle mod_tile not having a valid storage context (causing a segmentation fault) (#398)

This only seems to happen after a delay pool is created (i.e. when `ModTileEnableTileThrottling` is enabled) and is then being manipulated.
This commit is contained in:
Hummeltech
2024-03-02 17:44:56 -07:00
committed by GitHub
parent 2de946dde1
commit b37cfd9ebb
3 changed files with 36 additions and 22 deletions

View File

@ -13,9 +13,15 @@ runs:
shell: bash --noprofile --norc -euxo pipefail {0} shell: bash --noprofile --norc -euxo pipefail {0}
working-directory: build working-directory: build
- name: Set `TEST_ARTIFACT_NAME`
run: |
echo "TEST_ARTIFACT_NAME=$(echo ${{ matrix.image || matrix.os || github.job }}-${{ matrix.compiler }} | sed 's/[^0-9a-zA-Z-]/_/g')" >> "$GITHUB_ENV"
shell: bash --noprofile --norc -euxo pipefail {0}
if: failure()
- name: Upload test artifacts on failure - name: Upload test artifacts on failure
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: Test Artifacts - ${{ matrix.image || matrix.os || github.job }}-${{ matrix.compiler }} name: Test Artifacts - ${{ env.TEST_ARTIFACT_NAME }}
path: build/tests path: build/tests
if: failure() if: failure()

View File

@ -1681,12 +1681,11 @@ static int tile_translate(request_rec *r)
rdata->layerNumber = i; rdata->layerNumber = i;
rdata->store = get_storage_backend(r, i); rdata->store = get_storage_backend(r, i);
if (rdata->store == NULL) { if (rdata->store == NULL || rdata->store->storage_ctx == NULL) {
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "tile_translate: failed to get valid storage backend"); ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "tile_translate: failed to get valid storage backend/storage backend context");
if (!incRespCounter(HTTP_INTERNAL_SERVER_ERROR, r, cmd, rdata->layerNumber)) { if (!incRespCounter(HTTP_INTERNAL_SERVER_ERROR, r, cmd, rdata->layerNumber)) {
ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, "Failed to increase response stats counter");
"Failed to increase response stats counter");
} }
return HTTP_INTERNAL_SERVER_ERROR; return HTTP_INTERNAL_SERVER_ERROR;

View File

@ -320,7 +320,7 @@ foreach(STORAGE_BACKEND_INDEX RANGE ${STORAGE_BACKENDS_LENGTH})
set_tests_properties(render_expired_${SOCKET_TYPE}_${STORAGE_BACKEND} PROPERTIES set_tests_properties(render_expired_${SOCKET_TYPE}_${STORAGE_BACKEND} PROPERTIES
DEPENDS render_speedtest_${SOCKET_TYPE}_${STORAGE_BACKEND} DEPENDS render_speedtest_${SOCKET_TYPE}_${STORAGE_BACKEND}
FIXTURES_REQUIRED services_started_${STORAGE_BACKEND} FIXTURES_REQUIRED services_started_${STORAGE_BACKEND}
TIMEOUT 60 TIMEOUT 90
) )
add_test(NAME render_expired_delete_${SOCKET_TYPE}_${STORAGE_BACKEND} add_test(NAME render_expired_delete_${SOCKET_TYPE}_${STORAGE_BACKEND}
COMMAND ${BASH} -c " COMMAND ${BASH} -c "
@ -340,7 +340,7 @@ foreach(STORAGE_BACKEND_INDEX RANGE ${STORAGE_BACKENDS_LENGTH})
set_tests_properties(render_expired_delete_${SOCKET_TYPE}_${STORAGE_BACKEND} PROPERTIES set_tests_properties(render_expired_delete_${SOCKET_TYPE}_${STORAGE_BACKEND} PROPERTIES
DEPENDS render_expired_touch_${SOCKET_TYPE}_${STORAGE_BACKEND} DEPENDS render_expired_touch_${SOCKET_TYPE}_${STORAGE_BACKEND}
FIXTURES_REQUIRED services_started_${STORAGE_BACKEND} FIXTURES_REQUIRED services_started_${STORAGE_BACKEND}
TIMEOUT 60 TIMEOUT 90
) )
add_test(NAME render_expired_touch_${SOCKET_TYPE}_${STORAGE_BACKEND} add_test(NAME render_expired_touch_${SOCKET_TYPE}_${STORAGE_BACKEND}
COMMAND ${BASH} -c " COMMAND ${BASH} -c "
@ -360,7 +360,7 @@ foreach(STORAGE_BACKEND_INDEX RANGE ${STORAGE_BACKENDS_LENGTH})
set_tests_properties(render_expired_touch_${SOCKET_TYPE}_${STORAGE_BACKEND} PROPERTIES set_tests_properties(render_expired_touch_${SOCKET_TYPE}_${STORAGE_BACKEND} PROPERTIES
DEPENDS render_speedtest_${SOCKET_TYPE}_${STORAGE_BACKEND} DEPENDS render_speedtest_${SOCKET_TYPE}_${STORAGE_BACKEND}
FIXTURES_REQUIRED services_started_${STORAGE_BACKEND} FIXTURES_REQUIRED services_started_${STORAGE_BACKEND}
TIMEOUT 60 TIMEOUT 90
) )
add_test(NAME render_list_${SOCKET_TYPE}_${STORAGE_BACKEND} add_test(NAME render_list_${SOCKET_TYPE}_${STORAGE_BACKEND}
COMMAND ${BASH} -c " COMMAND ${BASH} -c "
@ -380,7 +380,7 @@ foreach(STORAGE_BACKEND_INDEX RANGE ${STORAGE_BACKENDS_LENGTH})
set_tests_properties(render_list_${SOCKET_TYPE}_${STORAGE_BACKEND} PROPERTIES set_tests_properties(render_list_${SOCKET_TYPE}_${STORAGE_BACKEND} PROPERTIES
DEPENDS render_speedtest_${SOCKET_TYPE}_${STORAGE_BACKEND} DEPENDS render_speedtest_${SOCKET_TYPE}_${STORAGE_BACKEND}
FIXTURES_REQUIRED services_started_${STORAGE_BACKEND} FIXTURES_REQUIRED services_started_${STORAGE_BACKEND}
TIMEOUT 60 TIMEOUT 90
) )
add_test(NAME render_list_stdin_${SOCKET_TYPE}_${STORAGE_BACKEND} add_test(NAME render_list_stdin_${SOCKET_TYPE}_${STORAGE_BACKEND}
COMMAND ${BASH} -c " COMMAND ${BASH} -c "
@ -399,7 +399,7 @@ foreach(STORAGE_BACKEND_INDEX RANGE ${STORAGE_BACKENDS_LENGTH})
set_tests_properties(render_list_stdin_${SOCKET_TYPE}_${STORAGE_BACKEND} PROPERTIES set_tests_properties(render_list_stdin_${SOCKET_TYPE}_${STORAGE_BACKEND} PROPERTIES
DEPENDS render_speedtest_${SOCKET_TYPE}_${STORAGE_BACKEND} DEPENDS render_speedtest_${SOCKET_TYPE}_${STORAGE_BACKEND}
FIXTURES_REQUIRED services_started_${STORAGE_BACKEND} FIXTURES_REQUIRED services_started_${STORAGE_BACKEND}
TIMEOUT 60 TIMEOUT 90
) )
add_test(NAME render_old_${SOCKET_TYPE}_${STORAGE_BACKEND} add_test(NAME render_old_${SOCKET_TYPE}_${STORAGE_BACKEND}
COMMAND ${BASH} -c " COMMAND ${BASH} -c "
@ -419,7 +419,7 @@ foreach(STORAGE_BACKEND_INDEX RANGE ${STORAGE_BACKENDS_LENGTH})
set_tests_properties(render_old_${SOCKET_TYPE}_${STORAGE_BACKEND} PROPERTIES set_tests_properties(render_old_${SOCKET_TYPE}_${STORAGE_BACKEND} PROPERTIES
DEPENDS render_speedtest_${SOCKET_TYPE}_${STORAGE_BACKEND} DEPENDS render_speedtest_${SOCKET_TYPE}_${STORAGE_BACKEND}
FIXTURES_REQUIRED services_started_${STORAGE_BACKEND} FIXTURES_REQUIRED services_started_${STORAGE_BACKEND}
TIMEOUT 60 TIMEOUT 90
) )
add_test(NAME render_speedtest_${SOCKET_TYPE}_${STORAGE_BACKEND} add_test(NAME render_speedtest_${SOCKET_TYPE}_${STORAGE_BACKEND}
COMMAND ${BASH} -c " COMMAND ${BASH} -c "
@ -434,7 +434,7 @@ foreach(STORAGE_BACKEND_INDEX RANGE ${STORAGE_BACKENDS_LENGTH})
) )
set_tests_properties(render_speedtest_${SOCKET_TYPE}_${STORAGE_BACKEND} PROPERTIES set_tests_properties(render_speedtest_${SOCKET_TYPE}_${STORAGE_BACKEND} PROPERTIES
FIXTURES_REQUIRED "services_started_${STORAGE_BACKEND};tiles_downloaded_${STORAGE_BACKEND}" FIXTURES_REQUIRED "services_started_${STORAGE_BACKEND};tiles_downloaded_${STORAGE_BACKEND}"
TIMEOUT 60 TIMEOUT 90
) )
add_test(NAME add_tile_config_${SOCKET_TYPE}_${STORAGE_BACKEND} add_test(NAME add_tile_config_${SOCKET_TYPE}_${STORAGE_BACKEND}
COMMAND ${BASH} -c " COMMAND ${BASH} -c "
@ -561,10 +561,13 @@ foreach(STORAGE_BACKEND_INDEX RANGE ${STORAGE_BACKENDS_LENGTH})
echo \"Tile Last Rendered At (Old): \${TILE_LAST_RENDERED_AT_OLD}\" echo \"Tile Last Rendered At (Old): \${TILE_LAST_RENDERED_AT_OLD}\"
${SLEEP_EXECUTABLE} 1 ${SLEEP_EXECUTABLE} 1
TILE_DIRTY_ON_OUTPUT=$(\${TILE_DIRTY_ON_CMD}) TILE_DIRTY_ON_OUTPUT=$(\${TILE_DIRTY_ON_CMD})
echo \"Dirty: \${TILE_DIRTY_ON_OUTPUT}\" echo \"Dirty On Output: \${TILE_DIRTY_ON_OUTPUT}\"
if [ \"\${TILE_DIRTY_ON_OUTPUT}\" != \"Tile submitted for rendering\" ]; then until [ \"\${TILE_DIRTY_ON_OUTPUT}\" == \"Tile submitted for rendering\" ]; do
exit 1; echo 'Sleeping 1s';
fi ${SLEEP_EXECUTABLE} 1;
TILE_DIRTY_ON_OUTPUT=$(\${TILE_DIRTY_ON_CMD})
echo \"Dirty On Output: \${TILE_DIRTY_ON_OUTPUT}\"
done
TILE_LAST_RENDERED_AT_NEW=$(\${TILE_STATUS_ON_CMD} | ${GREP_EXECUTABLE} -o 'Last rendered at [^\\.]*.') TILE_LAST_RENDERED_AT_NEW=$(\${TILE_STATUS_ON_CMD} | ${GREP_EXECUTABLE} -o 'Last rendered at [^\\.]*.')
echo \"Tile Last Rendered At (New): \${TILE_LAST_RENDERED_AT_NEW}\" echo \"Tile Last Rendered At (New): \${TILE_LAST_RENDERED_AT_NEW}\"
until [ \"\${TILE_LAST_RENDERED_AT_OLD}\" != \"\${TILE_LAST_RENDERED_AT_NEW}\" ]; do until [ \"\${TILE_LAST_RENDERED_AT_OLD}\" != \"\${TILE_LAST_RENDERED_AT_NEW}\" ]; do
@ -575,14 +578,20 @@ foreach(STORAGE_BACKEND_INDEX RANGE ${STORAGE_BACKENDS_LENGTH})
done done
TILE_DIRTY_OFF_CODE=$(${CURL_CMD} --write-out '%{http_code}' ${DIRTY_OFF_URL}) TILE_DIRTY_OFF_CODE=$(${CURL_CMD} --write-out '%{http_code}' ${DIRTY_OFF_URL})
echo \"Dirty Off code: '\${TILE_DIRTY_OFF_CODE}'\" echo \"Dirty Off code: '\${TILE_DIRTY_OFF_CODE}'\"
if [ \"\${TILE_DIRTY_OFF_CODE}\" != \"404\" ]; then until [ \"\${TILE_DIRTY_OFF_CODE}\" == \"404\" ]; do
exit 1; echo 'Sleeping 1s';
fi ${SLEEP_EXECUTABLE} 1;
TILE_DIRTY_OFF_CODE=$(${CURL_CMD} --write-out '%{http_code}' ${DIRTY_OFF_URL})
echo \"Dirty Off code: '\${TILE_DIRTY_OFF_CODE}'\"
done
TILE_STATUS_OFF_CODE=$(${CURL_CMD} --write-out '%{http_code}' ${STATUS_OFF_URL}) TILE_STATUS_OFF_CODE=$(${CURL_CMD} --write-out '%{http_code}' ${STATUS_OFF_URL})
echo \"Status Off code: '\${TILE_STATUS_OFF_CODE}'\" echo \"Status Off code: '\${TILE_STATUS_OFF_CODE}'\"
if [ \"\${TILE_STATUS_OFF_CODE}\" != \"404\" ]; then until [ \"\${TILE_STATUS_OFF_CODE}\" == \"404\" ]; do
exit 1; echo 'Sleeping 1s';
fi ${SLEEP_EXECUTABLE} 1;
TILE_STATUS_OFF_CODE=$(${CURL_CMD} --write-out '%{http_code}' ${STATUS_OFF_URL})
echo \"Status Off code: '\${TILE_STATUS_OFF_CODE}'\"
done
" "
WORKING_DIRECTORY tests WORKING_DIRECTORY tests
) )