[
https://issues.apache.org/jira/browse/TWILL-223?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15948084#comment-15948084
]
ASF GitHub Bot commented on TWILL-223:
--------------------------------------
Github user albertshau commented on a diff in the pull request:
https://github.com/apache/twill/pull/47#discussion_r108811273
--- Diff:
twill-yarn/src/main/java/org/apache/twill/filesystem/FileContextLocationFactory.java
---
@@ -103,16 +138,32 @@ public Location create(URI uri) {
@Override
public Location getHomeLocation() {
+ FileContext fc = getFileContext();
// Fix for TWILL-163. FileContext.getHomeDirectory() uses
System.getProperty("user.name") instead of UGI
return new FileContextLocation(this, fc,
new
Path(fc.getHomeDirectory().getParent(), fc.getUgi().getShortUserName()));
}
/**
- * Returns the {@link FileContext} used by this {@link LocationFactory}.
+ * Returns the {@link FileContext} for the current user based on {@link
UserGroupInformation#getCurrentUser()}.
+ *
+ * @throws IllegalStateException if failed to determine the current user
or fail to create the FileContext.
+ * @throws RuntimeException if failed to get the {@link FileContext}
object for the current user due to exception
*/
public FileContext getFileContext() {
- return fc;
+ try {
+ return
fileContextCache.getUnchecked(UserGroupInformation.getCurrentUser());
+ } catch (IOException e) {
+ throw new IllegalStateException("Failed to get current user
information", e);
+ } catch (UncheckedExecutionException e) {
+ Throwable cause = e.getCause();
+ if (cause instanceof UnsupportedFileSystemException) {
+ String defaultURI =
configuration.get(CommonConfigurationKeysPublic.FS_DEFAULT_NAME_KEY,
+
CommonConfigurationKeysPublic.FS_DEFAULT_NAME_DEFAULT);
+ throw new IllegalStateException("File system with URI '" +
defaultURI + "' is not supported", cause);
+ }
+ throw new RuntimeException(cause);
--- End diff --
at this point the cause should be a RuntimeException right? in which case
we should just propagate it directly rather than wrapping it.
> FileContextLocationFactory should use FileContext instance based on the
> caller UGI
> ----------------------------------------------------------------------------------
>
> Key: TWILL-223
> URL: https://issues.apache.org/jira/browse/TWILL-223
> Project: Apache Twill
> Issue Type: Bug
> Reporter: Terence Yim
> Assignee: Terence Yim
> Fix For: 0.11.0
>
>
> The {{FileContextLocationFactory}} internally has a cached {{FileContext}}
> object that was created when the factory was created. However, when the
> {{getFileContext}} is called (directly or via one of those {{create}}
> methods), the UGI might be different then the cached one. If the cached one
> is returning, FS operations will be performed with the user who creates the
> factory, not the one who calls the {{create}} method.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)