[
https://issues.apache.org/jira/browse/PIG-1313?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12849453#action_12849453
]
Alan Gates commented on PIG-1313:
---------------------------------
I'm not sure I understand all the pros and cons of Daniel's suggestion of
moving the variables to PigServer versus Bill's suggestion of making them
ThreadLocal. The advantages I can see of moving the values to PigServer are:
# It's clearer to other developers what's going on, since they can see that
these values are associated with an instance of PigServer. Otherwise we're
constructing a hidden dependency between the lifetime of PigServer and the
thread it's running in.
# If at some future point Pig's frontend is multi-threaded this will still work
(granted this is unlikely or at least far in the future)
The advantage I see with Bill's proposal is it's less change.
Are there other things I'm missing here?
> 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.