----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/51509/ -----------------------------------------------------------
(Updated Sept. 12, 2016, 1:01 p.m.) Review request for mesos, Benjamin Mahler, Artem Harutyunyan, and Joris Van Remoortere. Changes ------- Added TODO with some details on the Libevent code we would use. Bugs: MESOS-6104 https://issues.apache.org/jira/browse/MESOS-6104 Repository: mesos Description ------- `evbuffer_add_file` will take ownership of the file descriptor passed into it. Normally, this file descriptor is owned by the `FileEncoder` in the libprocess's `SocketManager`. Since there are two owners, one of the owners may close the file descriptor when it has been re-used. In this case, when multiple threads access the master's web UI at once with SSL enabled, the master may CHECK-fail due to a bad (closed) file descriptor. Diffs (updated) ----- 3rdparty/libprocess/src/libevent_ssl_socket.cpp 99a12b81eea9c37278b6db0bfedf4b151ff8ed50 Diff: https://reviews.apache.org/r/51509/diff/ Testing ------- The master will CHECK fail under the following: 1) Paste lots of text (16KB or more) of text into `src/webui/master/static/home.html`. The more text, the more reliable the repro. 2) Start the master with SSL enabled: ``` LIBPROCESS_SSL_ENABLED=true LIBPROCESS_SSL_KEY_FILE=key.pem LIBPROCESS_SSL_CERT_FILE=cert.pem bin/mesos-master.sh --work_dir=/tmp/master ``` 3) Run two instances of this python script repeatedly: ``` import socket import ssl s = ssl.wrap_socket(socket.socket()) s.connect(("localhost", 5050)) s.sendall("""GET /static/home.html HTTP/1.1 User-Agent: foobar Host: localhost:5050 Accept: */* Connection: Keep-Alive """) # The HTTP part of the response print s.recv(1000) ``` i.e. ``` while python test.py; do :; done & while python test.py; do :; done ``` Thanks, Joseph Wu