Make it possible to return 507 on PUT requests to DAV #841
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Proposed changes
These changes will partially fix #838. Without calling
ngx_http_dav_error
, there is no chance for a 507 status code to be returned. Instead, a 500 status code is being returned when there is no more space left on the device.It is important to note that these changes will only work properly when temporary data is being written to a separate partition/disk. When the storage is full and there is a PUT request on DAV, the core part of nginx will successfully write a temporary file, and afterwards the WebDAV PUT handler will fail to rename it, returning 507 as expected. In cases where temporary data and the target location are on the same disk/partition, this fix will NOT work because nginx will fail to write the temporary file (which is handled by the core part of nginx, as far as I can see).
Also, as a disclaimer: I am not proficient with C, I am just using nginx, found this problem, and tried to find a workaround that will not break everything. That is the reason I am not proposing a complete fix. Sorry, I don't know how to fix it completely and properly. Nevertheless, I think this PR could still be useful.