public boolean exists(DatasetId datasetInstanceId) throws Exception { return performDatasetAdmin(datasetInstanceId, DatasetAdmin::exists); }
new DirectoryClassLoaderProvider(cConf, locationFactory)) { final DatasetContext context = DatasetContext.from(datasetInstanceId.getNamespace()); UserGroupInformation ugi = getUgiForDataset(impersonator, datasetInstanceId); SystemMetadata metadata = computeSystemMetadata( datasetInstanceId, spec, props, typeMeta, type, context, existing != null, ugi); LOG.trace("Computed metadata for dataset {}", datasetInstanceId.getDataset());
@POST @Path("/data/datasets/{name}/admin/create") public void create(FullHttpRequest request, HttpResponder responder, @PathParam("namespace-id") String namespaceId, @PathParam("name") String name) { propagateUserId(request); InternalDatasetCreationParams params = GSON.fromJson(request.content().toString(StandardCharsets.UTF_8), InternalDatasetCreationParams.class); Preconditions.checkArgument(params.getProperties() != null, "Missing required 'instanceProps' parameter."); Preconditions.checkArgument(params.getTypeMeta() != null, "Missing required 'typeMeta' parameter."); DatasetProperties props = params.getProperties(); DatasetTypeMeta typeMeta = params.getTypeMeta(); try { DatasetId instanceId = new DatasetId(namespaceId, name); DatasetCreationResponse response = datasetAdminService.createOrUpdate(instanceId, typeMeta, props, null); responder.sendJson(HttpResponseStatus.OK, GSON.toJson(response)); } catch (BadRequestException | IllegalArgumentException e) { responder.sendString(HttpResponseStatus.BAD_REQUEST, e.getMessage()); } catch (Exception e) { responder.sendString(HttpResponseStatus.INTERNAL_SERVER_ERROR, e.getMessage()); } }
@POST @Path("/data/datasets/{name}/admin/exists") public void exists(HttpRequest request, HttpResponder responder, @PathParam("namespace-id") String namespaceId, @PathParam("name") String instanceName) { propagateUserId(request); NamespaceId namespace = new NamespaceId(namespaceId); try { DatasetId instanceId = namespace.dataset(instanceName); responder.sendJson(HttpResponseStatus.OK, GSON.toJson(new DatasetAdminOpResponse(datasetAdminService.exists(instanceId), null))); } catch (NotFoundException e) { LOG.debug("Got handler exception", e); responder.sendString(HttpResponseStatus.NOT_FOUND, StringUtils.defaultIfEmpty(e.getMessage(), "")); } catch (Exception e) { LOG.error(getAdminOpErrorMessage("exists", instanceName), e); responder.sendString(HttpResponseStatus.INTERNAL_SERVER_ERROR, getAdminOpErrorMessage("exists", instanceName)); } }
@POST @Path("/data/datasets/{name}/admin/upgrade") public void upgrade(HttpRequest request, HttpResponder responder, @PathParam("namespace-id") String namespaceId, @PathParam("name") String instanceName) { propagateUserId(request); try { DatasetId instanceId = new DatasetId(namespaceId, instanceName); datasetAdminService.upgrade(instanceId); responder.sendJson(HttpResponseStatus.OK, GSON.toJson(new DatasetAdminOpResponse(null, null))); } catch (NotFoundException e) { LOG.debug("Got handler exception", e); responder.sendString(HttpResponseStatus.NOT_FOUND, StringUtils.defaultIfEmpty(e.getMessage(), "")); } catch (Exception e) { LOG.error(getAdminOpErrorMessage("upgrade", instanceName), e); responder.sendString(HttpResponseStatus.INTERNAL_SERVER_ERROR, getAdminOpErrorMessage("upgrade", instanceName)); } }
@POST @Path("/data/datasets/{name}/admin/truncate") public void truncate(HttpRequest request, HttpResponder responder, @PathParam("namespace-id") String namespaceId, @PathParam("name") String instanceName) { propagateUserId(request); try { DatasetId instanceId = new DatasetId(namespaceId, instanceName); datasetAdminService.truncate(instanceId); responder.sendJson(HttpResponseStatus.OK, GSON.toJson(new DatasetAdminOpResponse(null, null))); } catch (NotFoundException e) { LOG.debug("Got handler exception", e); responder.sendString(HttpResponseStatus.NOT_FOUND, StringUtils.defaultIfEmpty(e.getMessage(), "")); } catch (Exception e) { LOG.error(getAdminOpErrorMessage("truncate", instanceName), e); responder.sendString(HttpResponseStatus.INTERNAL_SERVER_ERROR, getAdminOpErrorMessage("truncate", instanceName)); } }
@POST @Path("/data/datasets/{name}/admin/drop") public void drop(FullHttpRequest request, HttpResponder responder, @PathParam("namespace-id") String namespaceId, @PathParam("name") String instanceName) throws Exception { propagateUserId(request); InternalDatasetDropParams params = GSON.fromJson(request.content().toString(StandardCharsets.UTF_8), InternalDatasetDropParams.class); Preconditions.checkArgument(params.getInstanceSpec() != null, "Missing required 'instanceSpec' parameter."); Preconditions.checkArgument(params.getTypeMeta() != null, "Missing required 'typeMeta' parameter."); DatasetSpecification spec = params.getInstanceSpec(); DatasetTypeMeta typeMeta = params.getTypeMeta(); try { datasetAdminService.drop(new DatasetId(namespaceId, instanceName), typeMeta, spec); responder.sendJson(HttpResponseStatus.OK, GSON.toJson(spec)); } catch (BadRequestException e) { responder.sendString(HttpResponseStatus.BAD_REQUEST, e.getMessage()); } }
public void drop(final DatasetId datasetInstanceId, final DatasetTypeMeta typeMeta, final DatasetSpecification spec) throws Exception { LOG.info("Dropping dataset with spec: {}, type meta: {}", spec, typeMeta); try (DatasetClassLoaderProvider classLoaderProvider = new DirectoryClassLoaderProvider(cConf, locationFactory)) { UserGroupInformation ugi = getUgiForDataset(impersonator, datasetInstanceId); ImpersonationUtils.doAs(ugi, (Callable<Void>) () -> { DatasetType type = dsFramework.getDatasetType(typeMeta, null, classLoaderProvider); if (type == null) { throw new BadRequestException( String.format("Cannot instantiate dataset type using provided type meta: %s", typeMeta)); } DatasetAdmin admin = type.getAdmin(DatasetContext.from(datasetInstanceId.getNamespace()), spec); try { admin.drop(); } finally { Closeables.closeQuietly(admin); } return null; }); } }
new DatasetAdminService(dsFramework, cConf, locationFactory, datasetInstantiatorFactory, impersonator); ImmutableSet<HttpHandler> handlers = ImmutableSet.<HttpHandler>of(new DatasetAdminOpHTTPHandler(datasetAdminService));
new DirectoryClassLoaderProvider(cConf, locationFactory)) { final DatasetContext context = DatasetContext.from(datasetInstanceId.getNamespace()); UserGroupInformation ugi = getUgiForDataset(impersonator, datasetInstanceId); SystemMetadata metadata = computeSystemMetadata( datasetInstanceId, spec, props, typeMeta, type, context, existing != null, ugi); LOG.trace("Computed metadata for dataset {}", datasetInstanceId.getDataset());
@POST @Path("/data/datasets/{name}/admin/create") public void create(FullHttpRequest request, HttpResponder responder, @PathParam("namespace-id") String namespaceId, @PathParam("name") String name) { propagateUserId(request); InternalDatasetCreationParams params = GSON.fromJson(request.content().toString(StandardCharsets.UTF_8), InternalDatasetCreationParams.class); Preconditions.checkArgument(params.getProperties() != null, "Missing required 'instanceProps' parameter."); Preconditions.checkArgument(params.getTypeMeta() != null, "Missing required 'typeMeta' parameter."); DatasetProperties props = params.getProperties(); DatasetTypeMeta typeMeta = params.getTypeMeta(); try { DatasetId instanceId = new DatasetId(namespaceId, name); DatasetCreationResponse response = datasetAdminService.createOrUpdate(instanceId, typeMeta, props, null); responder.sendJson(HttpResponseStatus.OK, GSON.toJson(response)); } catch (BadRequestException | IllegalArgumentException e) { responder.sendString(HttpResponseStatus.BAD_REQUEST, e.getMessage()); } catch (Exception e) { responder.sendString(HttpResponseStatus.INTERNAL_SERVER_ERROR, e.getMessage()); } }
@POST @Path("/data/datasets/{name}/admin/exists") public void exists(HttpRequest request, HttpResponder responder, @PathParam("namespace-id") String namespaceId, @PathParam("name") String instanceName) { propagateUserId(request); NamespaceId namespace = new NamespaceId(namespaceId); try { DatasetId instanceId = namespace.dataset(instanceName); responder.sendJson(HttpResponseStatus.OK, GSON.toJson(new DatasetAdminOpResponse(datasetAdminService.exists(instanceId), null))); } catch (NotFoundException e) { LOG.debug("Got handler exception", e); responder.sendString(HttpResponseStatus.NOT_FOUND, StringUtils.defaultIfEmpty(e.getMessage(), "")); } catch (Exception e) { LOG.error(getAdminOpErrorMessage("exists", instanceName), e); responder.sendString(HttpResponseStatus.INTERNAL_SERVER_ERROR, getAdminOpErrorMessage("exists", instanceName)); } }
@POST @Path("/data/datasets/{name}/admin/upgrade") public void upgrade(HttpRequest request, HttpResponder responder, @PathParam("namespace-id") String namespaceId, @PathParam("name") String instanceName) { propagateUserId(request); try { DatasetId instanceId = new DatasetId(namespaceId, instanceName); datasetAdminService.upgrade(instanceId); responder.sendJson(HttpResponseStatus.OK, GSON.toJson(new DatasetAdminOpResponse(null, null))); } catch (NotFoundException e) { LOG.debug("Got handler exception", e); responder.sendString(HttpResponseStatus.NOT_FOUND, StringUtils.defaultIfEmpty(e.getMessage(), "")); } catch (Exception e) { LOG.error(getAdminOpErrorMessage("upgrade", instanceName), e); responder.sendString(HttpResponseStatus.INTERNAL_SERVER_ERROR, getAdminOpErrorMessage("upgrade", instanceName)); } }
@POST @Path("/data/datasets/{name}/admin/truncate") public void truncate(HttpRequest request, HttpResponder responder, @PathParam("namespace-id") String namespaceId, @PathParam("name") String instanceName) { propagateUserId(request); try { DatasetId instanceId = new DatasetId(namespaceId, instanceName); datasetAdminService.truncate(instanceId); responder.sendJson(HttpResponseStatus.OK, GSON.toJson(new DatasetAdminOpResponse(null, null))); } catch (NotFoundException e) { LOG.debug("Got handler exception", e); responder.sendString(HttpResponseStatus.NOT_FOUND, StringUtils.defaultIfEmpty(e.getMessage(), "")); } catch (Exception e) { LOG.error(getAdminOpErrorMessage("truncate", instanceName), e); responder.sendString(HttpResponseStatus.INTERNAL_SERVER_ERROR, getAdminOpErrorMessage("truncate", instanceName)); } }
@POST @Path("/data/datasets/{name}/admin/drop") public void drop(FullHttpRequest request, HttpResponder responder, @PathParam("namespace-id") String namespaceId, @PathParam("name") String instanceName) throws Exception { propagateUserId(request); InternalDatasetDropParams params = GSON.fromJson(request.content().toString(StandardCharsets.UTF_8), InternalDatasetDropParams.class); Preconditions.checkArgument(params.getInstanceSpec() != null, "Missing required 'instanceSpec' parameter."); Preconditions.checkArgument(params.getTypeMeta() != null, "Missing required 'typeMeta' parameter."); DatasetSpecification spec = params.getInstanceSpec(); DatasetTypeMeta typeMeta = params.getTypeMeta(); try { datasetAdminService.drop(new DatasetId(namespaceId, instanceName), typeMeta, spec); responder.sendJson(HttpResponseStatus.OK, GSON.toJson(spec)); } catch (BadRequestException e) { responder.sendString(HttpResponseStatus.BAD_REQUEST, e.getMessage()); } }
public void drop(final DatasetId datasetInstanceId, final DatasetTypeMeta typeMeta, final DatasetSpecification spec) throws Exception { LOG.info("Dropping dataset with spec: {}, type meta: {}", spec, typeMeta); try (DatasetClassLoaderProvider classLoaderProvider = new DirectoryClassLoaderProvider(cConf, locationFactory)) { UserGroupInformation ugi = getUgiForDataset(impersonator, datasetInstanceId); ImpersonationUtils.doAs(ugi, (Callable<Void>) () -> { DatasetType type = dsFramework.getDatasetType(typeMeta, null, classLoaderProvider); if (type == null) { throw new BadRequestException( String.format("Cannot instantiate dataset type using provided type meta: %s", typeMeta)); } DatasetAdmin admin = type.getAdmin(DatasetContext.from(datasetInstanceId.getNamespace()), spec); try { admin.drop(); } finally { Closeables.closeQuietly(admin); } return null; }); } }
new DatasetAdminService(framework, cConf, locationFactory, datasetInstantiatorFactory, impersonator); ImmutableSet<HttpHandler> handlers = ImmutableSet.of(new DatasetAdminOpHTTPHandler(datasetAdminService));
public boolean exists(DatasetId datasetInstanceId) throws Exception { return performDatasetAdmin(datasetInstanceId, DatasetAdmin::exists); }
@POST @Path("/data/datasets/{name}/admin/update") public void update(FullHttpRequest request, HttpResponder responder, @PathParam("namespace-id") String namespaceId, @PathParam("name") String name) { propagateUserId(request); InternalDatasetUpdateParams params = GSON.fromJson(request.content().toString(StandardCharsets.UTF_8), InternalDatasetUpdateParams.class); Preconditions.checkArgument(params.getProperties() != null, "Missing required 'instanceProps' parameter."); Preconditions.checkArgument(params.getTypeMeta() != null, "Missing required 'typeMeta' parameter."); Preconditions.checkArgument(params.getExistingSpec() != null, "Missing required 'existingSpec' parameter."); DatasetProperties props = params.getProperties(); DatasetSpecification existing = params.getExistingSpec(); DatasetTypeMeta typeMeta = params.getTypeMeta(); try { DatasetId instanceId = new DatasetId(namespaceId, name); DatasetCreationResponse response = datasetAdminService.createOrUpdate(instanceId, typeMeta, props, existing); responder.sendJson(HttpResponseStatus.OK, GSON.toJson(response)); } catch (NotFoundException e) { LOG.debug("Got handler exception", e); responder.sendString(HttpResponseStatus.NOT_FOUND, StringUtils.defaultIfEmpty(e.getMessage(), "")); } catch (BadRequestException e) { responder.sendString(HttpResponseStatus.BAD_REQUEST, e.getMessage()); } catch (IncompatibleUpdateException e) { responder.sendString(HttpResponseStatus.CONFLICT, e.getMessage()); } catch (Exception e) { responder.sendString(HttpResponseStatus.INTERNAL_SERVER_ERROR, e.getMessage()); } }
public void truncate(DatasetId datasetInstanceId) throws Exception { LOG.info("Truncating dataset {}", datasetInstanceId); performDatasetAdmin(datasetInstanceId, DatasetAdmin::truncate); }