private static Path localizeCache ( Configuration conf , URI cache , long confFileStamp , CacheStatus cacheStatus , boolean isArchive ) throws IOException { FileSystem fs = getFileSystem ( cache , conf ) ; FileSystem localFs = FileSystem . getLocal ( conf ) ; Path parchive = null ; if ( isArchive ) { parchive = new Path ( cacheStatus . localizedLoadPath , new Path ( cacheStatus . localizedLoadPath . getName ( ) ) ) ; } else { parchive = cacheStatus . localizedLoadPath ; } if ( ! localFs . mkdirs ( parchive . getParent ( ) ) ) { throw new IOException ( "Mkdirs failed to create directory " + cacheStatus . localizedLoadPath . toString ( ) ) ; } String cacheId = cache . getPath ( ) ; fs . copyToLocalFile ( new Path ( cacheId ) , parchive ) ; if ( isArchive ) { String tmpArchive = parchive . toString ( ) . toLowerCase ( ) ; File srcFile = new File ( parchive . toString ( ) ) ; File destDir = new File ( parchive . getParent ( ) . toString ( ) ) ; if ( tmpArchive . endsWith ( ".jar" ) ) { RunJar . unJar ( srcFile , destDir ) ; } else if ( tmpArchive . endsWith ( ".zip" ) ) { FileUtil . unZip ( srcFile , destDir ) ; } else if ( isTarFile ( tmpArchive ) ) { FileUtil . unTar ( srcFile , destDir ) ; } // else will not do anyhting // and copy the file into the dir as it is } long cacheSize = FileUtil . getDU ( new File ( parchive . getParent ( ) . toString ( ) ) ) ; cacheStatus . size = cacheSize ; addCacheInfoUpdate ( cacheStatus ) ; // do chmod here try { //Setting recursive permission to grant everyone read and execute Path localDir = new Path ( cacheStatus . localizedBaseDir , cacheStatus . uniqueParentDir ) ; LOG . info ( "Doing chmod on localdir :" + localDir ) ; FileUtil . chmod ( localDir . toString ( ) , "ugo+rx" , true ) ; } catch ( InterruptedException e ) { LOG . warn ( "Exception in chmod" + e . toString ( ) ) ; } // update cacheStatus to reflect the newly cached file cacheStatus . mtime = getTimestamp ( conf , cache ) ; return cacheStatus . localizedLoadPath ; }
and does chmod for the files