New set of changes on ‘develop’ branch of mod_wsgi repo.
Try again with latest:
• https://github.com/GrahamDumpleton/mod_wsgi/archive/develop.zip
or:
•
https://codeload.github.com/GrahamDumpleton/mod_wsgi/tar.gz/develop#mod_wsgi-4.5.6
<https://codeload.github.com/GrahamDumpleton/mod_wsgi/tar.gz/develop#mod_wsgi-4.5.6>
Thanks.
Graham
> On 15 Aug 2016, at 11:40 PM, Graham Dumpleton <[email protected]>
> wrote:
>
> Giving up for the night. Getting memory corruption all over the place now and
> can’t even get sane stack traces from gdb. Nothing making sense. Will start
> over tomorrow.
>
>> On 15 Aug 2016, at 11:30 PM, Stefan Nastic <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>> tried again and no luck ....
>>
>> Just to remind you that this happens immediately upon the firs request after
>> restarting the apache, so if you are referring to gc below, I don't see how
>> it can kick in and cause a problem. Just a thought ....
>>
>> Stefan
>>
>> On 15-Aug-16 15:16, Graham Dumpleton wrote:
>>> I am not confident that next change will solve the problem, but can you try
>>> pulling down source code again and try.
>>>
>>> I can’t recreate it so far after this change, but then that is what
>>> happened with the first change and it only started occurring again after
>>> you and someone else said it didn’t solve problem. Very confusing.
>>>
>>> The problem seems to relate to strange things going on when Python objects
>>> are being destroyed. Python 3 appears to behave differently with the new
>>> streams implementation.
>>>
>>> Graham
>>>
>>>> On 15 Aug 2016, at 10:51 PM, Stefan Nastic <[email protected]
>>>> <mailto:[email protected]>> wrote:
>>>>
>>>> Hi,
>>>>
>>>> I have just tested it (4.5.5) and am still getting the same error.
>>>>
>>>> Best,
>>>>
>>>> Stefan
>>>>
>>>> On 15-Aug-16 14:46, Graham Dumpleton wrote:
>>>>> Problem only affects Python 3.X. Verification of fix being worked on
>>>>> right now.
>>>>>
>>>>> If you are able to download:
>>>>>
>>>>> https://github.com/GrahamDumpleton/mod_wsgi/archive/develop.zip
>>>>> <https://github.com/GrahamDumpleton/mod_wsgi/archive/develop.zip>
>>>>>
>>>>> and try with that it would help immensely.
>>>>>
>>>>> Thanks.
>>>>>
>>>>> Graham
>>>>>
>>>>>> On 15 Aug 2016, at 10:43 PM, Stefan Nastic <[email protected]
>>>>>> <mailto:[email protected]>> wrote:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> sorry for a bit delayed response, but I was traveling the last week and
>>>>>> had a very limited internet connectivity.
>>>>>>
>>>>>> Now back to the issue. I tested the version 4.5.4 and in short there is
>>>>>> some problem as I get seg fault in the apache. I have checked 4.5.4.
>>>>>> for the most common issues such as loading mod_python, linking against
>>>>>> shared libraries, etc. and there everything seam to be fine. I have
>>>>>> also tested the same compilation and installation procedure with 4.5.3
>>>>>> and it works fine.
>>>>>>
>>>>>> So I suspect that this is a codding error, most probably accessing the
>>>>>> protected memory region when you try to access/reproduce Log ID seed.
>>>>>> However, this is only my assumption since I have not had a chance to
>>>>>> look at your code.
>>>>>>
>>>>>> For debugging purposes ....
>>>>>>
>>>>>> Apache error log:
>>>>>>
>>>>>> [mpm_event:notice] [pid 25563:tid 140401132873600] AH00494: SIGHUP
>>>>>> received. Attempting to restart
>>>>>> [mpm_event:notice] [pid 25563:tid 140401132873600] AH00489:
>>>>>> Apache/2.4.10 (Debian) mod_wsgi/4.5.4 Python/3.4.2 configured --
>>>>>> resuming normal operations
>>>>>> [core:notice] [pid 25563:tid 140401132873600] AH00094: Command line:
>>>>>> '/usr/sbin/apache2'
>>>>>> [core:notice] [pid 25563:tid 140401132873600] AH00052: child pid 27051
>>>>>> exit signal Segmentation fault (11)
>>>>>>
>>>>>> OS: Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u4
>>>>>> (2016-02-29) x86_64 GNU/Linux
>>>>>>
>>>>>> APACHE:
>>>>>> Server version: Apache/2.4.10 (Debian)
>>>>>> Server built: Nov 28 2015 14:05:48
>>>>>> Server's Module Magic Number:
>>>>>> Server loaded: APR 1.5.1, APR-UTIL 1.5.4
>>>>>> Compiled using: APR 1.5.1, APR-UTIL 1.5.4
>>>>>> Architecture: 64-bit
>>>>>> Server MPM: event
>>>>>> threaded: yes (fixed thread count)
>>>>>> forked: yes (variable process count)
>>>>>> Server compiled with....
>>>>>> -D APR_HAS_SENDFILE
>>>>>> -D APR_HAS_MMAP
>>>>>> -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
>>>>>> -D APR_USE_SYSVSEM_SERIALIZE
>>>>>> -D APR_USE_PTHREAD_SERIALIZE
>>>>>> -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
>>>>>> -D APR_HAS_OTHER_CHILD
>>>>>> -D AP_HAVE_RELIABLE_PIPED_LOGS
>>>>>> -D DYNAMIC_MODULE_LIMIT=256
>>>>>> -D HTTPD_ROOT="/etc/apache2"
>>>>>> -D SUEXEC_BIN="/usr/lib/apache2/suexec"
>>>>>> -D DEFAULT_PIDLOG="/var/run/apache2.pid"
>>>>>> -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
>>>>>> -D DEFAULT_ERRORLOG="logs/error_log"
>>>>>> -D AP_TYPES_CONFIG_FILE="mime.types"
>>>>>> -D SERVER_CONFIG_FILE="apache2.conf"
>>>>>>
>>>>>> Python:
>>>>>> Python 3.4.2
>>>>>>
>>>>>>
>>>>>> Linked libs for mod_wsgi.so:
>>>>>>
>>>>>> linux-vdso.so.1 (0x00007ffd436c5000)
>>>>>> libpython3.4m.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
>>>>>> (0x00007f79fea6f000)
>>>>>> libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0
>>>>>> (0x00007f79fe852000)
>>>>>> libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f79fe64e000)
>>>>>> libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f79fe44b000)
>>>>>> libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f79fe14a000)
>>>>>> libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f79fdd9f000)
>>>>>> librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f79fdb97000)
>>>>>> libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f79fd96e000)
>>>>>> libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f79fd753000)
>>>>>> /lib64/ld-linux-x86-64.so.2 (0x00007f79ff2ea000)
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Hope this helps!
>>>>>> Best,
>>>>>> Stefan
>>>>>>
>>>>>> On Sunday, August 7, 2016 at 2:16:31 AM UTC+2, Graham Dumpleton wrote:
>>>>>> Believe this should all now be fixed on develop branch of mod_wsgi.
>>>>>> Please test and let me know if is now working as you expect so I can get
>>>>>> a new release out.
>>>>>>
>>>>>> If anyone is able to test off develop with Apache 2.0 and 2.2 (not just
>>>>>> 2.4), that would be most appreciated.
>>>>>>
>>>>>> Graham
>>>>>>
>>>>>>> On 6 Aug 2016, at 3:32 PM, Graham Dumpleton <graham.d...@ <>gmail.com
>>>>>>> <http://gmail.com/>> wrote:
>>>>>>>
>>>>>>> Getting closer. Anything output to sys.stdout and sys.stderr from
>>>>>>> within a request handler will now be routed via wsgi.errors. Your %L
>>>>>>> format will work. The remote address shows IP correctly, but is not
>>>>>>> showing the remote port correctly, instead showing 0.
>>>>>>>
>>>>>>> Please start testing using develop branch and let me know of any
>>>>>>> unexpected problems.
>>>>>>>
>>>>>>> Graham
>>>>>>>
>>>>>>>> On 6 Aug 2016, at 1:59 PM, Graham Dumpleton <graham.d...@ <>gmail.com
>>>>>>>> <http://gmail.com/>> wrote:
>>>>>>>>
>>>>>>>> So I have it sort of working when using stdout/stderr, but there is
>>>>>>>> one issue which means still need to do some work if can decide what
>>>>>>>> should be done.
>>>>>>>>
>>>>>>>> niaZC/85C0Q AH01628: authorization result: granted (no directives)
>>>>>>>> niaZC/85C0Q AH01628: authorization result: granted (no directives)
>>>>>>>> niaZC/85C0Q global message
>>>>>>>> niaZC/85C0Q request message
>>>>>>>>
>>>>>>>> X+fwC/85C0Q AH01628: authorization result: granted (no directives)
>>>>>>>> X+fwC/85C0Q AH01628: authorization result: granted (no directives)
>>>>>>>> X+fwC/85C0Q queued messageglobal message
>>>>>>>> X+fwC/85C0Q request message
>>>>>>>>
>>>>>>>> The problem is the ‘queued message’. This is with application of:
>>>>>>>>
>>>>>>>> def application(environ, start_response):
>>>>>>>> print('global message')
>>>>>>>> print('request message', file=environ['wsgi.errors'])
>>>>>>>> print('queued message', end=‘')
>>>>>>>>
>>>>>>>> The ‘queued message’ is one which there was no newline terminator.
>>>>>>>>
>>>>>>>> What normally occurs is that messages get buffered up until a newline
>>>>>>>> terminator is encountered, which then acts to flush it out and write
>>>>>>>> it to Apache log API. This is important else if you do something like:
>>>>>>>>
>>>>>>>> print(1, 2, 3, 4)
>>>>>>>>
>>>>>>>> They will all get printed on separate log lines, which isn’t what you
>>>>>>>> would expect.
>>>>>>>>
>>>>>>>> The log ID only gets pulled in when you thus flush out what is
>>>>>>>> buffered.
>>>>>>>>
>>>>>>>> There a couple of problems around this.
>>>>>>>>
>>>>>>>> Each of those numbers in that last print() statement get buffered
>>>>>>>> separately. If another request handler does the same thing, they can
>>>>>>>> get interleaved, as there is only one stdout. When they get flushed
>>>>>>>> out, the log ID will be for whatever request sent the newline first.
>>>>>>>> This data will get attributed against wrong request.
>>>>>>>>
>>>>>>>> Similar issue is where a request never sent a new line like above, in
>>>>>>>> this case it ends up at start of data for next request.
>>>>>>>>
>>>>>>>> One solution which should work out reasonably cleanly is that if in a
>>>>>>>> request, reach back and grab wsgi.errors and divert output via that,
>>>>>>>> which is per request and is flushed at the end of the request.
>>>>>>>> At least I think
>>>>>>>> that will work.
>>>>>>>>
>>>>>>>> More later.
>>>>>>>>
>>>>>>>> Graham
>>>>>>>>
>>>>>>>>> On 5 Aug 2016, at 11:34 PM, Graham Dumpleton <graham.d...@
>>>>>>>>> <>gmail.com <http://gmail.com/>> wrote:
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 5 Aug 2016, at 10:18 PM, Graham Dumpleton <graham.d...@
>>>>>>>>>> <>gmail.com <http://gmail.com/>> wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> On 5 Aug 2016, at 9:54 PM, Stefan Nastic <stefan....@ <>gmail.com
>>>>>>>>>>> <http://gmail.com/>> wrote:
>>>>>>>>>>>
>>>>>>>>>>> Is there a way to configure the logging with mod_wsgi and Django
>>>>>>>>>>> without losing the request information, such as remote client IP or
>>>>>>>>>>> unique log ID AND without using environ['wsgi.errors']? Other
>>>>>>>>>>> solutions such as logging wrapper would be also acceptable...
>>>>>>>>>>>
>>>>>>>>>>> Please also see related SO discussions:
>>>>>>>>>>> http://stackoverflow.com/questions/38786532/logging-with-apache-2-4-mod-wsgi-and-django
>>>>>>>>>>>
>>>>>>>>>>> <http://stackoverflow.com/questions/38786532/logging-with-apache-2-4-mod-wsgi-and-django>
>>>>>>>>>>> http://stackoverflow.com/questions/38767989/apache-2-4-error-log-entries-incomplete
>>>>>>>>>>>
>>>>>>>>>>> <http://stackoverflow.com/questions/38767989/apache-2-4-error-log-entries-incomplete>
>>>>>>>>>>
>>>>>>>>>> Short answer, no.
>>>>>>>>>>
>>>>>>>>>> The two basic problems are detailed in:
>>>>>>>>>>
>>>>>>>>>> https://github.com/GrahamDumpleton/mod_wsgi/issues/144
>>>>>>>>>> <https://github.com/GrahamDumpleton/mod_wsgi/issues/144>
>>>>>>>>>> https://github.com/GrahamDumpleton/mod_wsgi/issues/145
>>>>>>>>>> <https://github.com/GrahamDumpleton/mod_wsgi/issues/145>
>>>>>>>>>>
>>>>>>>>>> but the solution even for the first is far from simple.
>>>>>>>>>>
>>>>>>>>>> The problem is that the request and connection log IDs are only
>>>>>>>>>> generated the first time a message is logged via the Apache log API.
>>>>>>>>>> In the case of proxying a request from the Apache child worker
>>>>>>>>>> process to a daemon mode process, there wouldn’t have been any
>>>>>>>>>> messages logged and so nothing has triggered the generation of the
>>>>>>>>>> log IDs. This means they aren’t available to transfer across to the
>>>>>>>>>> daemon process such that they could be reconstructed into the
>>>>>>>>>> connection and request records to fake up things so that logging
>>>>>>>>>> works in daemon mode. A solution may be for mod_wsgi to forcibly
>>>>>>>>>> cause the generation of the log IDs on every request using an Apache
>>>>>>>>>> API call, even though they may not be required. The implications of
>>>>>>>>>> doing this need to be looked at. Alternatively, one works out what
>>>>>>>>>> seed information from a request is used to generate the log ID so
>>>>>>>>>> can ensure that is being passed across and added to the fake
>>>>>>>>>> connection and request objects that the logging will eventually use.
>>>>>>>>>
>>>>>>>>> Copying across underlying seed information isn’t possible because
>>>>>>>>> part of the calculation involves turning a C pointer to a data
>>>>>>>>> structure for the thread into an integer. One can’t set the C pointer
>>>>>>>>> to same value of daemon process side because if something then tries
>>>>>>>>> to access via it, process will crash.
>>>>>>>>>
>>>>>>>>> It is possible to force the generation of the connection and request
>>>>>>>>> IDs though if not already set and pass those across. Luckily is not
>>>>>>>>> so hard.
>>>>>>>>>
>>>>>>>>> The develop branch of the repo now has changes which will do that at
>>>>>>>>> least, with the connection and request ID available in the per
>>>>>>>>> request WSGI environ dictionary as mod_wsgi.connection_id and
>>>>>>>>> mod_wsgi.request_id. Any messages logged via wsgi.errors will now
>>>>>>>>> show the correct log ID.
>>>>>>>>>
>>>>>>>>>> You also keep saying remote client IP doesn’t show. On my testing on
>>>>>>>>>> MacOS X it does and the client IP is transferred across to daemon
>>>>>>>>>> mode, so not sure what the issue is there as cannot replicate it at
>>>>>>>>>> this point.
>>>>>>>>>>
>>>>>>>>>> So trying to address even the log ID issues for wsgi.errors is going
>>>>>>>>>> to take some time and work. Linking messages to stdout/stderr back
>>>>>>>>>> to requests is going to be even more complicated.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> The stdout/stderr issues needs more investigation. One thing in our
>>>>>>>>> favour is that I had already added a thread local for tracking
>>>>>>>>> request state due to metrics collection. I don’t know that that gives
>>>>>>>>> access to the raw Apache request object though which is needed, so
>>>>>>>>> would likely need extending.
>>>>>>>>>
>>>>>>>>> If you really need something though, you can try caching those IDs
>>>>>>>>> from the per request WSGI environ dictionary and using those in
>>>>>>>>> messages somehow.
>>>>>>>>>
>>>>>>>>> Graham
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "modwsgi" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>>> an email to [email protected]
>>>>>> <mailto:[email protected]>.
>>>>>> To post to this group, send email to [email protected]
>>>>>> <mailto:[email protected]>.
>>>>>> Visit this group at https://groups.google.com/group/modwsgi
>>>>>> <https://groups.google.com/group/modwsgi>.
>>>>>> For more options, visit https://groups.google.com/d/optout
>>>>>> <https://groups.google.com/d/optout>.
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to a topic in the
>>>>> Google Groups "modwsgi" group.
>>>>> To unsubscribe from this topic, visit
>>>>> https://groups.google.com/d/topic/modwsgi/6I2jiEQomh8/unsubscribe
>>>>> <https://groups.google.com/d/topic/modwsgi/6I2jiEQomh8/unsubscribe>.
>>>>> To unsubscribe from this group and all its topics, send an email to
>>>>> [email protected]
>>>>> <mailto:[email protected]>.
>>>>> To post to this group, send email to [email protected]
>>>>> <mailto:[email protected]>.
>>>>> Visit this group at https://groups.google.com/group/modwsgi
>>>>> <https://groups.google.com/group/modwsgi>.
>>>>> For more options, visit https://groups.google.com/d/optout
>>>>> <https://groups.google.com/d/optout>.
>>>>
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google Groups
>>>> "modwsgi" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send an
>>>> email to [email protected]
>>>> <mailto:[email protected]>.
>>>> To post to this group, send email to [email protected]
>>>> <mailto:[email protected]>.
>>>> Visit this group at https://groups.google.com/group/modwsgi
>>>> <https://groups.google.com/group/modwsgi>.
>>>> For more options, visit https://groups.google.com/d/optout
>>>> <https://groups.google.com/d/optout>.
>>>
>>> --
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "modwsgi" group.
>>> To unsubscribe from this topic, visit
>>> https://groups.google.com/d/topic/modwsgi/6I2jiEQomh8/unsubscribe
>>> <https://groups.google.com/d/topic/modwsgi/6I2jiEQomh8/unsubscribe>.
>>> To unsubscribe from this group and all its topics, send an email to
>>> [email protected]
>>> <mailto:[email protected]>.
>>> To post to this group, send email to [email protected]
>>> <mailto:[email protected]>.
>>> Visit this group at https://groups.google.com/group/modwsgi
>>> <https://groups.google.com/group/modwsgi>.
>>> For more options, visit https://groups.google.com/d/optout
>>> <https://groups.google.com/d/optout>.
>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "modwsgi" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected]
>> <mailto:[email protected]>.
>> To post to this group, send email to [email protected]
>> <mailto:[email protected]>.
>> Visit this group at https://groups.google.com/group/modwsgi
>> <https://groups.google.com/group/modwsgi>.
>> For more options, visit https://groups.google.com/d/optout
>> <https://groups.google.com/d/optout>.
>
--
You received this message because you are subscribed to the Google Groups
"modwsgi" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/modwsgi.
For more options, visit https://groups.google.com/d/optout.