/** * Gets the UiFileInfo object that represents the fileId, or the filePath if fileId is -1. * * @param tachyonClient the TachyonFS client. * @param fileId the file id of the file. * @param filePath the path of the file. valid iff fileId is -1. * @return the UiFileInfo object of the file. * @throws FileDoesNotExistException * @throws IOException */ private UiFileInfo getUiFileInfo(TachyonFS tachyonClient, int fileId, TachyonURI filePath) throws FileDoesNotExistException, NotFoundException, IOException { ClientFileInfo fileInfo = tachyonClient.getFileStatus(fileId, filePath, true); if (fileInfo == null) { throw new FileDoesNotExistException( fileId != -1 ? Integer.toString(fileId) : filePath.toString()); } UiFileInfo uiFileInfo = new UiFileInfo(fileInfo); boolean blockExistOnWorker = false; for (long blockId : fileInfo.getBlockIds()) { if (mBlockDataManager.hasBlockMeta(blockId)) { blockExistOnWorker = true; BlockMeta blockMeta = mBlockDataManager.getVolatileBlockMeta(blockId); long blockSize = blockMeta.getBlockSize(); StorageLevelAlias storageLevelAlias = StorageDirId.getStorageLevelAlias(blockMeta.getParentDir().getStorageDirId()); // The block last access time is not available. Use -1 for now. uiFileInfo.addBlock(storageLevelAlias, blockId, blockSize, -1); } } if (!blockExistOnWorker) { throw new FileDoesNotExistException( fileId != -1 ? Integer.toString(fileId) : filePath.toString()); } return uiFileInfo; }
/** * Populates attribute fields with data from the MasterInfo associated with this servlet. Errors * will be displayed in an error field. Debugging can be enabled to display additional data. Will * eventually redirect the request to a jsp. * * @param request The HttpServletRequest object * @param response The HttpServletResponse object * @throws ServletException * @throws IOException * @throws UnknownHostException */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, UnknownHostException { request.setAttribute("debug", Constants.DEBUG); request.setAttribute("masterNodeAddress", mMasterInfo.getMasterAddress().toString()); request.setAttribute("invalidPathError", ""); List<ClientFileInfo> filesInfo = null; String currentPath = request.getParameter("path"); if (currentPath.isEmpty()) { currentPath = "/"; } request.setAttribute("currentPath", currentPath); try { UiFileInfo currentFileInfo = new UiFileInfo(mMasterInfo.getFileInfo(currentPath)); request.setAttribute("currentDirectory", currentFileInfo); if (!currentFileInfo.getIsDirectory()) { displayFile(currentFileInfo.getAbsolutePath(), request); getServletContext().getRequestDispatcher("/viewFile.jsp").forward(request, response); return; } CommonUtils.validatePath(currentPath); setPathDirectories(currentPath, request); filesInfo = mMasterInfo.getFilesInfo(currentPath); } catch (FileDoesNotExistException fdne) { request.setAttribute("invalidPathError", "Error: Invalid Path " + fdne.getMessage()); getServletContext().getRequestDispatcher("/browse.jsp").forward(request, response); return; } catch (InvalidPathException ipe) { request.setAttribute("invalidPathError", "Error: Invalid Path " + ipe.getLocalizedMessage()); getServletContext().getRequestDispatcher("/browse.jsp").forward(request, response); return; } List<UiFileInfo> fileInfos = new ArrayList<UiFileInfo>(filesInfo.size()); for (ClientFileInfo fileInfo : filesInfo) { UiFileInfo toAdd = new UiFileInfo(fileInfo); try { if (!toAdd.getIsDirectory()) { toAdd.setFileLocations(mMasterInfo.getFileLocations(toAdd.getId())); } } catch (FileDoesNotExistException fdne) { request.setAttribute("invalidPathError", "Error: Invalid Path " + fdne.getMessage()); getServletContext().getRequestDispatcher("/browse.jsp").forward(request, response); return; } fileInfos.add(toAdd); } Collections.sort(fileInfos); request.setAttribute("fileInfos", fileInfos); getServletContext().getRequestDispatcher("/browse.jsp").forward(request, response); }
/** * Populates attributes before redirecting to a jsp. * * @param request The HttpServletRequest object * @param response The HttpServletReponse object * @throws ServletException * @throws IOException */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("fatalError", ""); TachyonFS tachyonClient = TachyonFS.get(mTachyonConf); String filePath = request.getParameter("path"); if (!(filePath == null || filePath.isEmpty())) { // Display file block info try { UiFileInfo uiFileInfo = getUiFileInfo(tachyonClient, new TachyonURI(filePath)); request.setAttribute("fileBlocksOnTier", uiFileInfo.getBlocksOnTier()); request.setAttribute("blockSizeByte", uiFileInfo.getBlockSizeBytes()); request.setAttribute("path", filePath); getServletContext() .getRequestDispatcher("/worker/viewFileBlocks.jsp") .forward(request, response); return; } catch (FileDoesNotExistException fdne) { request.setAttribute("fatalError", "Error: Invalid Path " + fdne.getMessage()); getServletContext() .getRequestDispatcher("/worker/blockInfo.jsp") .forward(request, response); return; } catch (IOException ie) { request.setAttribute( "invalidPathError", "Error: File " + filePath + " is not available " + ie.getMessage()); getServletContext() .getRequestDispatcher("/worker/blockInfo.jsp") .forward(request, response); return; } catch (NotFoundException nfe) { request.setAttribute("fatalError", "Error: block not found. " + nfe.getMessage()); getServletContext() .getRequestDispatcher("/worker/blockInfo.jsp") .forward(request, response); return; } } List<Integer> fileIds = getSortedFileIds(); request.setAttribute("nTotalFile", fileIds.size()); // URL can not determine offset and limit, let javascript in jsp determine and redirect if (request.getParameter("offset") == null && request.getParameter("limit") == null) { getServletContext().getRequestDispatcher("/worker/blockInfo.jsp").forward(request, response); return; } try { int offset = Integer.parseInt(request.getParameter("offset")); int limit = Integer.parseInt(request.getParameter("limit")); List<Integer> subFileIds = fileIds.subList(offset, offset + limit); List<UiFileInfo> uiFileInfos = new ArrayList<UiFileInfo>(subFileIds.size()); for (int fileId : subFileIds) { uiFileInfos.add(getUiFileInfo(tachyonClient, fileId)); } request.setAttribute("fileInfos", uiFileInfos); } catch (FileDoesNotExistException fdne) { request.setAttribute("fatalError", "Error: Invalid FileId " + fdne.getMessage()); getServletContext().getRequestDispatcher("/worker/blockInfo.jsp").forward(request, response); return; } catch (NumberFormatException nfe) { request.setAttribute( "fatalError", "Error: offset or limit parse error, " + nfe.getLocalizedMessage()); getServletContext().getRequestDispatcher("/worker/blockInfo.jsp").forward(request, response); return; } catch (IndexOutOfBoundsException iobe) { request.setAttribute( "fatalError", "Error: offset or offset + limit is out of bound, " + iobe.getLocalizedMessage()); getServletContext().getRequestDispatcher("/worker/blockInfo.jsp").forward(request, response); return; } catch (IllegalArgumentException iae) { request.setAttribute("fatalError", iae.getLocalizedMessage()); getServletContext().getRequestDispatcher("/worker/blockInfo.jsp").forward(request, response); return; } catch (NotFoundException nfe) { request.setAttribute("fatalError", nfe.getLocalizedMessage()); getServletContext().getRequestDispatcher("/worker/blockInfo.jsp").forward(request, response); return; } getServletContext().getRequestDispatcher("/worker/blockInfo.jsp").forward(request, response); }
/** * Populates attribute fields with data from the MasterInfo associated with this servlet. Errors * will be displayed in an error field. Debugging can be enabled to display additional data. Will * eventually redirect the request to a jsp. * * @param request The HttpServletRequest object * @param response The HttpServletResponse object * @throws ServletException * @throws IOException * @throws UnknownHostException */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, UnknownHostException { request.setAttribute("debug", Constants.DEBUG); request.setAttribute("masterNodeAddress", mMasterInfo.getMasterAddress().toString()); request.setAttribute("invalidPathError", ""); List<ClientFileInfo> filesInfo = null; String currentPath = request.getParameter("path"); if (currentPath == null || currentPath.isEmpty()) { currentPath = Constants.PATH_SEPARATOR; } request.setAttribute("currentPath", currentPath); request.setAttribute("viewingOffset", 0); try { ClientFileInfo clientFileInfo = mMasterInfo.getClientFileInfo(currentPath); UiFileInfo currentFileInfo = new UiFileInfo(clientFileInfo); request.setAttribute("currentDirectory", currentFileInfo); request.setAttribute("blockSizeByte", currentFileInfo.getBlockSizeBytes()); if (!currentFileInfo.getIsDirectory()) { String tmpParam = request.getParameter("offset"); long offset = 0; try { if (tmpParam != null) { offset = Long.valueOf(tmpParam); } } catch (NumberFormatException nfe) { offset = 0; } if (offset < 0) { offset = 0; } else if (offset > clientFileInfo.getLength()) { offset = clientFileInfo.getLength(); } displayFile(currentFileInfo.getAbsolutePath(), request, offset); request.setAttribute("viewingOffset", offset); getServletContext().getRequestDispatcher("/viewFile.jsp").forward(request, response); return; } CommonUtils.validatePath(currentPath); setPathDirectories(currentPath, request); filesInfo = mMasterInfo.getFilesInfo(currentPath); } catch (FileDoesNotExistException fdne) { request.setAttribute("invalidPathError", "Error: Invalid Path " + fdne.getMessage()); getServletContext().getRequestDispatcher("/browse.jsp").forward(request, response); return; } catch (InvalidPathException ipe) { request.setAttribute("invalidPathError", "Error: Invalid Path " + ipe.getLocalizedMessage()); getServletContext().getRequestDispatcher("/browse.jsp").forward(request, response); return; } catch (IOException ie) { request.setAttribute( "invalidPathError", "Error: File " + currentPath + " is not available " + ie.getMessage()); getServletContext().getRequestDispatcher("/browse.jsp").forward(request, response); return; } List<UiFileInfo> fileInfos = new ArrayList<UiFileInfo>(filesInfo.size()); for (ClientFileInfo fileInfo : filesInfo) { UiFileInfo toAdd = new UiFileInfo(fileInfo); try { if (!toAdd.getIsDirectory() && fileInfo.getLength() > 0) { toAdd.setFileLocations(mMasterInfo.getFileBlocks(toAdd.getId()).get(0).getLocations()); } } catch (FileDoesNotExistException fdne) { request.setAttribute("invalidPathError", "Error: Invalid Path " + fdne.getMessage()); getServletContext().getRequestDispatcher("/browse.jsp").forward(request, response); return; } fileInfos.add(toAdd); } Collections.sort(fileInfos); request.setAttribute("fileInfos", fileInfos); getServletContext().getRequestDispatcher("/browse.jsp").forward(request, response); }
@Override public int compareTo(UiFileInfo o) { return ABSOLUATE_PATH.compareTo(o.getAbsolutePath()); }