Mal Graty created STORM-3164:
--------------------------------

             Summary: Multilang storm.py uses traceback.format_exe incorrectly
                 Key: STORM-3164
                 URL: https://issues.apache.org/jira/browse/STORM-3164
             Project: Apache Storm
          Issue Type: Bug
          Components: storm-core, storm-multilang
    Affects Versions: 1.2.2
            Reporter: Mal Graty


{code:title=storm.py}
                    except Exception as e:
                        reportError(traceback.format_exc(e))
                        fail(tup)
        except Exception as e:
reportError(traceback.format_exc(e))
{code}

The method signature for traceback.format_exc is (limit=None, chain=True). 
Where limit is an int and chain a bool. See documentation for python2.7 and 3:

https://docs.python.org/2.7/library/traceback.html
https://docs.python.org/3/library/traceback.html

Passing an Exception object results in the exception handling code throwing an 
exception itself and crashing out as a result:
{code}
During handling of the above exception, another exception occurred:             
                                                                                
                                                   
                                                                                
                                                                                
                                                   
Traceback (most recent call last):                                              
                                                                                
                                                   
  File "word_joiner.py", line 20, in <module>                                   
                                                                                
                                                          
    WordJoiner().run()                                                          
                                                                                
                                                   
  File 
"/tmp/be86d36d-d293-4694-a8f0-0f018e540936/supervisor/stormdist/test-1-1532824220/resources/storm.py",
 line 200, in run                                                               
                    
    reportError(traceback.format_exc(e))                                        
                                                                                
                                                   
  File "/usr/lib/python3.4/traceback.py", line 256, in format_exc               
                                                                                
                                                   
    return "".join(format_exception(*sys.exc_info(), limit=limit, chain=chain)) 
                                                                                
                                                   
  File "/usr/lib/python3.4/traceback.py", line 181, in format_exception         
                                                                                
                                                   
    return list(_format_exception_iter(etype, value, tb, limit, chain))         
                                                                                
                                                   
  File "/usr/lib/python3.4/traceback.py", line 153, in _format_exception_iter   
                                                                                
                                                   
    yield from _format_list_iter(_extract_tb_iter(tb, limit=limit))             
                                                                                
                                                   
  File "/usr/lib/python3.4/traceback.py", line 18, in _format_list_iter         
                                                                                
                                                   
    for filename, lineno, name, line in extracted_list:                         
                                                                                
                                                   
  File "/usr/lib/python3.4/traceback.py", line 58, in _extract_tb_or_stack_iter 
                                                                                
                                                   
    while curr is not None and (limit is None or n < limit):                    
                                                                                
                                                   
TypeError: unorderable types: int() < TypeError()
{code}

The solution in this case is to simply not pass any arguments to 
traceback.format_exc. It will automatically fetch the context of the catch 
block it resides in and gracefully return the traceback as a string, which is 
what storm.py is expecting.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to