@Override
public boolean hasAccessPermission(String user, NamespaceKey key, DatasetConfig datasetConfig) {
if (config.isImpersonationEnabled()) {
if (datasetConfig.getReadDefinition() != null) {
final FileSystemWrapper userFs = getFS(user);
final List<TimedRunnable<Boolean>> permissionCheckTasks = Lists.newArrayList();
permissionCheckTasks.addAll(getUpdateKeyPermissionTasks(datasetConfig, userFs));
permissionCheckTasks.addAll(getSplitPermissiomTasks(datasetConfig, userFs, user));
try {
Stopwatch stopwatch = Stopwatch.createStarted();
final List<Boolean> accessPermissions = TimedRunnable.run("check access permission for " + key, logger, permissionCheckTasks, 16);
stopwatch.stop();
logger.debug("Checking access permission for {} took {} ms", key, stopwatch.elapsed(TimeUnit.MILLISECONDS));
for (Boolean permission : accessPermissions) {
if (!permission) {
return false;
}
}
} catch (IOException ioe) {
throw UserException.dataReadError(ioe).build(logger);
}
}
}
return true;
}