ashb opened a new pull request, #51934:
URL: https://github.com/apache/airflow/pull/51934

   When we are running normally (without impersonation) then before we fork the
   supervisor sets up a new socketpair for logging before forking, and then
   configures structlog in the forked process to send logs over that socket.
   
   However sudo by default will close all open file descriptors other than 
stdin,
   stdout and stderr, so our logs socket (sockets, and files, are all file
   descriptors).
   
   We could ask people to change their `sudoers` config file to add the
   [`closefrom_overide`][1] and invoke `sudo -C <logfd>` however many people
   either might not have access to do this, or might not feel comfortable in
   making this change.
   
   There is however another option to us: On both unix and windows there is the
   ability to pass _open_ file descriptors (which remember, sockets are file
   descriptors) between two processes!
   
   So what this PR does is introduce a new Request and Response pair, and
   customize the send+receive code to send a new FD (since we've already closed
   the child end for normal start up before we knew the task was actually going
   to run as another user, and we can't get it back, so we just open another)
   that is configured to receive and handle JSON logs.
   
   Relates to #51780
   
   Enough with the words, lets see what it does.
   
   ### Logging from a task
   
   *Before*
   
   <img width="1258" alt="before-logging-in-task" 
src="https://github.com/user-attachments/assets/0fbb7f1d-1c2b-490f-9cf2-86bf80ff2057";
 />
   
   Note the double timestamp and level etc (one formatted nicely by the UI, the 
other in the log message etc)
   
   *After*
   
   <img width="1298" alt="after-logging-in-task" 
src="https://github.com/user-attachments/assets/d771df55-2b3b-498a-a094-87aa91e66d71";
 />
   
   The two highlighted sections are the same source in each task run 
   
   ### Unhandled exception
   
   [1]: 
https://linux.die.net/man/5/sudoers#:~:text=on%20by%20default.-,closefrom_override,is%20off%20by%20default.,-compress_io'%20If%20set
   
   Now on to the real "ick". An unhandled exception in an operator/task:
   
   *Before*
   
   <img width="1534" alt="before-uncaught-exc" 
src="https://github.com/user-attachments/assets/518c45c7-98f7-49d4-b0b4-a6d2bc9321f5";
 />
   
   Ick. Not helped by rich at all here
   
   *After*
   
   <img width="1168" alt="after-uncaught-exc" 
src="https://github.com/user-attachments/assets/58484e6e-74f1-4c00-81b3-a1a64cabe295";
 />


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@airflow.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to