[ 
https://issues.apache.org/jira/browse/PIG-1313?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12849501#action_12849501
 ] 

Bill Graham commented on PIG-1313:
----------------------------------

You summed it up well Alan. My ThreadLocal suggestion was really just because 
we could modify one class internally instead of doing a much larger refactor. 

I'm unclear though on how we'd go about moving FileLocalizer.toDelete and 
FileLocalizer.deleteOnFail into PigServer? Currently, calls to the 
FileLocalizer methods that create these temp file objects happen all over the 
codebase in places where the calling code wouldn't have a handle to their 
PigServer instance AFAIK. Unless they could get the PigServer from the 
PigContext or something of the sort. Otherwise, it would need to be a static 
call to PigServer methods, and we've just moved the same problem to another 
class.



> PigServer leaks memory over time
> --------------------------------
>
>                 Key: PIG-1313
>                 URL: https://issues.apache.org/jira/browse/PIG-1313
>             Project: Pig
>          Issue Type: Bug
>            Reporter: Bill Graham
>         Attachments: Pig1313Reproducer.java
>
>
> When {{PigServer}} runs it creates temporary files using the 
> {{FileLocalizer.getTemporaryPath(..)}}. This static method creates and 
> returns a handle to a temporary file (as an instance of 
> {{ElementDescriptor}}). The {{ElementDescriptors}} returned by this method 
> are kept on a static {{Stack}} named {{toDelete}}. The items on {{toDelete}} 
> get removed by the {{FileLocalizer.deleteTempFile()}} method.
> The only place in the code where I see {{FileLocalizer.deleteTempFile()}} 
> called is in the Main class. {{PigServer}} does not call that method though, 
> so a long-running VM that repeatedly uses instances of {{PigServer}} to run 
> jobs will leak memory via {{toDelete}}.
> One suggested fix is to have {{PigServer.shutdown()}} call 
> {{FileLocalizer.deleteTempFile()}}, but this would cause problems in a 
> multi-threaded environment, since it seems {{ElementDescriptors}} are pushed 
> onto the {{toDelete}} stack before they're used, not once they're done with. 
> With this approach, running multiple instances of {{PigServer}} in separate 
> threads could cause one completed job to clobber the other's still-in-use 
> temp files.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to