Search in sources :

Example 1 with XAttrCodec

use of org.apache.hadoop.fs.XAttrCodec in project hadoop by apache.

the class HttpFSServer method get.

/**
   * Binding to handle GET requests, supported operations are
   *
   * @param path the path for operation.
   * @param op the HttpFS operation of the request.
   * @param params the HttpFS parameters of the request.
   *
   * @return the request response.
   *
   * @throws IOException thrown if an IO error occurred. Thrown exceptions are
   * handled by {@link HttpFSExceptionProvider}.
   * @throws FileSystemAccessException thrown if a FileSystemAccess releated
   * error occurred. Thrown exceptions are handled by
   * {@link HttpFSExceptionProvider}.
   */
@GET
@Path("{path:.*}")
@Produces({ MediaType.APPLICATION_OCTET_STREAM + "; " + JettyUtils.UTF_8, MediaType.APPLICATION_JSON + "; " + JettyUtils.UTF_8 })
public Response get(@PathParam("path") String path, @QueryParam(OperationParam.NAME) OperationParam op, @Context Parameters params, @Context HttpServletRequest request) throws IOException, FileSystemAccessException {
    UserGroupInformation user = HttpUserGroupInformation.get();
    Response response;
    path = makeAbsolute(path);
    MDC.put(HttpFSFileSystem.OP_PARAM, op.value().name());
    MDC.put("hostname", request.getRemoteAddr());
    switch(op.value()) {
        case OPEN:
            {
                //Invoking the command directly using an unmanaged FileSystem that is
                // released by the FileSystemReleaseFilter
                final FSOperations.FSOpen command = new FSOperations.FSOpen(path);
                final FileSystem fs = createFileSystem(user);
                InputStream is = null;
                UserGroupInformation ugi = UserGroupInformation.createProxyUser(user.getShortUserName(), UserGroupInformation.getLoginUser());
                try {
                    is = ugi.doAs(new PrivilegedExceptionAction<InputStream>() {

                        @Override
                        public InputStream run() throws Exception {
                            return command.execute(fs);
                        }
                    });
                } catch (InterruptedException ie) {
                    LOG.info("Open interrupted.", ie);
                    Thread.currentThread().interrupt();
                }
                Long offset = params.get(OffsetParam.NAME, OffsetParam.class);
                Long len = params.get(LenParam.NAME, LenParam.class);
                AUDIT_LOG.info("[{}] offset [{}] len [{}]", new Object[] { path, offset, len });
                InputStreamEntity entity = new InputStreamEntity(is, offset, len);
                response = Response.ok(entity).type(MediaType.APPLICATION_OCTET_STREAM).build();
                break;
            }
        case GETFILESTATUS:
            {
                FSOperations.FSFileStatus command = new FSOperations.FSFileStatus(path);
                Map json = fsExecute(user, command);
                AUDIT_LOG.info("[{}]", path);
                response = Response.ok(json).type(MediaType.APPLICATION_JSON).build();
                break;
            }
        case LISTSTATUS:
            {
                String filter = params.get(FilterParam.NAME, FilterParam.class);
                FSOperations.FSListStatus command = new FSOperations.FSListStatus(path, filter);
                Map json = fsExecute(user, command);
                AUDIT_LOG.info("[{}] filter [{}]", path, (filter != null) ? filter : "-");
                response = Response.ok(json).type(MediaType.APPLICATION_JSON).build();
                break;
            }
        case GETHOMEDIRECTORY:
            {
                enforceRootPath(op.value(), path);
                FSOperations.FSHomeDir command = new FSOperations.FSHomeDir();
                JSONObject json = fsExecute(user, command);
                AUDIT_LOG.info("");
                response = Response.ok(json).type(MediaType.APPLICATION_JSON).build();
                break;
            }
        case INSTRUMENTATION:
            {
                enforceRootPath(op.value(), path);
                Groups groups = HttpFSServerWebApp.get().get(Groups.class);
                List<String> userGroups = groups.getGroups(user.getShortUserName());
                if (!userGroups.contains(HttpFSServerWebApp.get().getAdminGroup())) {
                    throw new AccessControlException("User not in HttpFSServer admin group");
                }
                Instrumentation instrumentation = HttpFSServerWebApp.get().get(Instrumentation.class);
                Map snapshot = instrumentation.getSnapshot();
                response = Response.ok(snapshot).build();
                break;
            }
        case GETCONTENTSUMMARY:
            {
                FSOperations.FSContentSummary command = new FSOperations.FSContentSummary(path);
                Map json = fsExecute(user, command);
                AUDIT_LOG.info("[{}]", path);
                response = Response.ok(json).type(MediaType.APPLICATION_JSON).build();
                break;
            }
        case GETFILECHECKSUM:
            {
                FSOperations.FSFileChecksum command = new FSOperations.FSFileChecksum(path);
                Map json = fsExecute(user, command);
                AUDIT_LOG.info("[{}]", path);
                response = Response.ok(json).type(MediaType.APPLICATION_JSON).build();
                break;
            }
        case GETFILEBLOCKLOCATIONS:
            {
                response = Response.status(Response.Status.BAD_REQUEST).build();
                break;
            }
        case GETACLSTATUS:
            {
                FSOperations.FSAclStatus command = new FSOperations.FSAclStatus(path);
                Map json = fsExecute(user, command);
                AUDIT_LOG.info("ACL status for [{}]", path);
                response = Response.ok(json).type(MediaType.APPLICATION_JSON).build();
                break;
            }
        case GETXATTRS:
            {
                List<String> xattrNames = params.getValues(XAttrNameParam.NAME, XAttrNameParam.class);
                XAttrCodec encoding = params.get(XAttrEncodingParam.NAME, XAttrEncodingParam.class);
                FSOperations.FSGetXAttrs command = new FSOperations.FSGetXAttrs(path, xattrNames, encoding);
                @SuppressWarnings("rawtypes") Map json = fsExecute(user, command);
                AUDIT_LOG.info("XAttrs for [{}]", path);
                response = Response.ok(json).type(MediaType.APPLICATION_JSON).build();
                break;
            }
        case LISTXATTRS:
            {
                FSOperations.FSListXAttrs command = new FSOperations.FSListXAttrs(path);
                @SuppressWarnings("rawtypes") Map json = fsExecute(user, command);
                AUDIT_LOG.info("XAttr names for [{}]", path);
                response = Response.ok(json).type(MediaType.APPLICATION_JSON).build();
                break;
            }
        case LISTSTATUS_BATCH:
            {
                String startAfter = params.get(HttpFSParametersProvider.StartAfterParam.NAME, HttpFSParametersProvider.StartAfterParam.class);
                byte[] token = HttpFSUtils.EMPTY_BYTES;
                if (startAfter != null) {
                    token = startAfter.getBytes(Charsets.UTF_8);
                }
                FSOperations.FSListStatusBatch command = new FSOperations.FSListStatusBatch(path, token);
                @SuppressWarnings("rawtypes") Map json = fsExecute(user, command);
                AUDIT_LOG.info("[{}] token [{}]", path, token);
                response = Response.ok(json).type(MediaType.APPLICATION_JSON).build();
                break;
            }
        case GETTRASHROOT:
            {
                FSOperations.FSTrashRoot command = new FSOperations.FSTrashRoot(path);
                JSONObject json = fsExecute(user, command);
                AUDIT_LOG.info("[{}]", path);
                response = Response.ok(json).type(MediaType.APPLICATION_JSON).build();
                break;
            }
        case GETALLSTORAGEPOLICY:
            {
                FSOperations.FSGetAllStoragePolicies command = new FSOperations.FSGetAllStoragePolicies();
                JSONObject json = fsExecute(user, command);
                AUDIT_LOG.info("[{}]", path);
                response = Response.ok(json).type(MediaType.APPLICATION_JSON).build();
                break;
            }
        case GETSTORAGEPOLICY:
            {
                FSOperations.FSGetStoragePolicy command = new FSOperations.FSGetStoragePolicy(path);
                JSONObject json = fsExecute(user, command);
                AUDIT_LOG.info("[{}]", path);
                response = Response.ok(json).type(MediaType.APPLICATION_JSON).build();
                break;
            }
        default:
            {
                throw new IOException(MessageFormat.format("Invalid HTTP GET operation [{0}]", op.value()));
            }
    }
    return response;
}
Also used : OffsetParam(org.apache.hadoop.fs.http.server.HttpFSParametersProvider.OffsetParam) FileSystem(org.apache.hadoop.fs.FileSystem) HttpFSFileSystem(org.apache.hadoop.fs.http.client.HttpFSFileSystem) List(java.util.List) UserGroupInformation(org.apache.hadoop.security.UserGroupInformation) HttpUserGroupInformation(org.apache.hadoop.security.token.delegation.web.HttpUserGroupInformation) AccessControlException(java.security.AccessControlException) XAttrNameParam(org.apache.hadoop.fs.http.server.HttpFSParametersProvider.XAttrNameParam) JSONObject(org.json.simple.JSONObject) JSONObject(org.json.simple.JSONObject) Map(java.util.Map) Instrumentation(org.apache.hadoop.lib.service.Instrumentation) XAttrEncodingParam(org.apache.hadoop.fs.http.server.HttpFSParametersProvider.XAttrEncodingParam) XAttrCodec(org.apache.hadoop.fs.XAttrCodec) Groups(org.apache.hadoop.lib.service.Groups) FilterParam(org.apache.hadoop.fs.http.server.HttpFSParametersProvider.FilterParam) LenParam(org.apache.hadoop.fs.http.server.HttpFSParametersProvider.LenParam) InputStream(java.io.InputStream) IOException(java.io.IOException) FileSystemAccessException(org.apache.hadoop.lib.service.FileSystemAccessException) AccessControlException(java.security.AccessControlException) IOException(java.io.IOException) InputStreamEntity(org.apache.hadoop.lib.wsrs.InputStreamEntity) Response(javax.ws.rs.core.Response) Path(javax.ws.rs.Path) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET)

Aggregations

IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 AccessControlException (java.security.AccessControlException)1 List (java.util.List)1 Map (java.util.Map)1 GET (javax.ws.rs.GET)1 Path (javax.ws.rs.Path)1 Produces (javax.ws.rs.Produces)1 Response (javax.ws.rs.core.Response)1 FileSystem (org.apache.hadoop.fs.FileSystem)1 XAttrCodec (org.apache.hadoop.fs.XAttrCodec)1 HttpFSFileSystem (org.apache.hadoop.fs.http.client.HttpFSFileSystem)1 FilterParam (org.apache.hadoop.fs.http.server.HttpFSParametersProvider.FilterParam)1 LenParam (org.apache.hadoop.fs.http.server.HttpFSParametersProvider.LenParam)1 OffsetParam (org.apache.hadoop.fs.http.server.HttpFSParametersProvider.OffsetParam)1 XAttrEncodingParam (org.apache.hadoop.fs.http.server.HttpFSParametersProvider.XAttrEncodingParam)1 XAttrNameParam (org.apache.hadoop.fs.http.server.HttpFSParametersProvider.XAttrNameParam)1 FileSystemAccessException (org.apache.hadoop.lib.service.FileSystemAccessException)1 Groups (org.apache.hadoop.lib.service.Groups)1 Instrumentation (org.apache.hadoop.lib.service.Instrumentation)1