[ 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.