potiuk commented on issue #15952:
URL: https://github.com/apache/airflow/issues/15952#issuecomment-882094536


   I think this is somewhat ambiguous whether the APIs of docker return bytes 
or strings. Apparently it has been a problem before as  if you look few lines 
up, the conditional decode happens (and that's why we have line.encode("utf-8") 
that should stay there.
   
   ```
               for line in lines:
                   line = line.strip()
                   if hasattr(line, 'decode'):
                       # Note that lines returned can also be byte sequences so 
we have to handle decode here
                       line = line.decode('utf-8')
                   res_lines.append(line)
   ```
   Not nice.
   
   I looked at the APIs https://docker-py.readthedocs.io/en/1.2.3/api/  and it 
is mentioned in both `attach` and `logs` that it will return either `str` or 
generator. It does not mention generator of what type (and we are using 
stream=Yes in attach so I guess we get the generator not str). So well, it's 
kinda not-specified whether the generator returns  bytes or strings and it's 
"OKeyish" to try to react to both cases.
   
   Interestingly, the documentation says that `attach` method is really a 
wrapper around logs() - and when you look closer at the method seems what we 
are trying to do is to retrieve the logs that we already retrieved (and stored 
in `res_lines` as array of `str`).  So it is likely that we actually receive 
again the same generator when we call logs after earlier calling "attach" with 
"stream=True".
   
   So I think the proper fix is actually: 
   
   ```
   ret = res_lines if self.xcom_all else line
   ```
   
   However I wonder maybe there was a good reason why the line was encoded to 
bytes before pushing to Xcom? I think if we fix it, we should make a major 
release of docker operator.
   


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to