@Override public void create(NamespaceMeta namespaceMeta) throws Exception { namespaceAdmin.create(namespaceMeta); }
@Override public void delete(NamespaceId namespaceId) throws Exception { namespaceAdmin.delete(namespaceId); }
@Override public List<NamespaceMeta> list() throws Exception { return namespaceAdmin.list(); }
@Override public void execute(EmptyArguments arguments) throws FileAlreadyExistsException { try { if (!namespaceAdmin.exists(NamespaceId.DEFAULT)) { namespaceAdmin.create(NamespaceMeta.DEFAULT); LOG.info("Successfully created namespace '{}'.", NamespaceMeta.DEFAULT); } } catch (FileAlreadyExistsException e) { // avoid retrying if its a FileAlreadyExistsException throw e; } catch (NamespaceAlreadyExistsException e) { // default namespace already exists, move on } catch (Exception e) { // the default namespace is valid so any exception here is transient and should be retried. throw new RetryableException(e); } }
List<NamespaceMeta> namespaces = namespaceClient.list(); Assert.assertEquals(3, namespaces.size()); Set<NamespaceMeta> expectedNamespaces = ImmutableSet.of(NamespaceMeta.DEFAULT, TEST_NAMESPACE_META1, Assert.assertEquals(expectedNamespaces, Sets.newHashSet(namespaces)); NamespaceMeta namespaceMeta = namespaceClient.get(new NamespaceId(TEST_NAMESPACE1)); Assert.assertEquals(TEST_NAMESPACE_META1, namespaceMeta); namespaceClient.get(new NamespaceId("nonExistentNamespace")); Assert.fail("Did not expect namespace 'nonExistentNamespace' to exist."); } catch (NotFoundException expected) { namespaceClient.create(toCreate); NamespaceMeta receivedMeta = namespaceClient.get(fooNamespace); Assert.assertNotNull(receivedMeta); Assert.assertEquals(toCreate, receivedMeta); namespaceClient.delete(fooNamespace); try { namespaceClient.get(fooNamespace); Assert.fail("Did not expect namespace '" + fooNamespace + "' to exist after deleting it."); } catch (NotFoundException expected) {
@Test public void testUpdateExistingKeytab() throws Exception { String namespace = "updateNamespace"; NamespaceId namespaceId = new NamespaceId(namespace); NamespaceMeta nsMeta = new NamespaceMeta.Builder().setName(namespaceId) .setPrincipal("alice").setKeytabURI("/alice/keytab").build(); namespaceAdmin.create(nsMeta); Assert.assertTrue(namespaceAdmin.exists(namespaceId)); // update the keytab URI String newKeytab = "/alice/new_keytab"; NamespaceMeta newKeytabMeta = new NamespaceMeta.Builder(nsMeta).setKeytabURI(newKeytab).build(); namespaceAdmin.updateProperties(nsMeta.getNamespaceId(), newKeytabMeta); // assert the keytab URI is updated and the version remains 0 Assert.assertEquals(newKeytab, namespaceAdmin.get(namespaceId).getConfig().getKeytabURIWithoutVersion()); Assert.assertEquals(0, namespaceAdmin.get(namespaceId).getConfig().getKeytabURIVersion()); // update the namespace with the same keytab URI namespaceAdmin.updateProperties(nsMeta.getNamespaceId(), newKeytabMeta); // assert the keytab URI without version remains the same and the version is incremented to 1 Assert.assertEquals(newKeytab, namespaceAdmin.get(namespaceId).getConfig().getKeytabURIWithoutVersion()); Assert.assertEquals(1, namespaceAdmin.get(namespaceId).getConfig().getKeytabURIVersion()); //clean up namespaceAdmin.delete(namespaceId); }
@Test public void testNamespaces() throws Exception { NamespaceAdmin namespaceAdmin = getNamespaceAdmin(); Authorizer authorizer = getAuthorizer(); try { namespaceAdmin.create(AUTH_NAMESPACE_META); Assert.fail("Namespace create should have failed because alice is not authorized on " + AUTH_NAMESPACE); } catch (UnauthorizedException expected) { // expected } createAuthNamespace(); Assert.assertTrue(namespaceAdmin.list().contains(AUTH_NAMESPACE_META)); namespaceAdmin.get(AUTH_NAMESPACE); // revoke privileges revokeAndAssertSuccess(AUTH_NAMESPACE); try { Assert.assertTrue(namespaceAdmin.list().isEmpty()); namespaceAdmin.exists(AUTH_NAMESPACE); Assert.fail("Namespace existence check should fail since the privilege of alice has been revoked"); } catch (UnauthorizedException expected) { // expected } // grant privileges again grantAndAssertSuccess(AUTH_NAMESPACE, ALICE, ImmutableSet.of(Action.ADMIN)); namespaceAdmin.exists(AUTH_NAMESPACE); Assert.assertEquals(ImmutableSet.of(new Privilege(AUTH_NAMESPACE, Action.ADMIN)), authorizer.listPrivileges(ALICE)); NamespaceMeta updated = new NamespaceMeta.Builder(AUTH_NAMESPACE_META).setDescription("new desc").build(); namespaceAdmin.updateProperties(AUTH_NAMESPACE, updated); Assert.assertEquals(updated, namespaceAdmin.get(AUTH_NAMESPACE)); }
@After @Override public void afterTest() throws Exception { Authorizer authorizer = getAuthorizer(); SecurityRequestContext.setUserId(ALICE.getName()); grantAndAssertSuccess(AUTH_NAMESPACE, SecurityRequestContext.toPrincipal(), EnumSet.of(Action.ADMIN)); // clean up. remove the namespace if it exists if (getNamespaceAdmin().exists(AUTH_NAMESPACE)) { getNamespaceAdmin().delete(AUTH_NAMESPACE); Assert.assertFalse(getNamespaceAdmin().exists(AUTH_NAMESPACE)); } revokeAndAssertSuccess(AUTH_NAMESPACE); for (EntityId entityId : cleanUpEntities) { revokeAndAssertSuccess(entityId); } Assert.assertEquals(Collections.emptySet(), authorizer.listPrivileges(ALICE)); }
@Override public NamespaceMeta get(NamespaceId namespaceId) throws Exception { return namespaceAdmin.get(namespaceId); }
@Override public Boolean call() throws Exception { return injector.getInstance(NamespaceAdmin.class).exists(NamespaceId.DEFAULT); } }, 5, TimeUnit.SECONDS);
@PUT @Path("/namespaces/{namespace-id}/properties") @AuditPolicy(AuditDetail.REQUEST_BODY) public void updateNamespaceProperties(FullHttpRequest request, HttpResponder responder, @PathParam("namespace-id") String namespaceId) throws Exception { NamespaceMeta meta = getNamespaceMeta(request); namespaceAdmin.updateProperties(new NamespaceId(namespaceId), meta); responder.sendString(HttpResponseStatus.OK, String.format("Updated properties for namespace '%s'.", namespaceId)); }
namespaceAdmin.create(new NamespaceMeta.Builder().setName(testSpace).setHiveDatabase(customHiveDatabase).build()); Assert.fail(); } catch (NamespaceCannotBeCreatedException e) { namespaceAdmin.create(new NamespaceMeta.Builder().setName(testSpace).setHiveDatabase(customHiveDatabase).build()); namespaceAdmin.delete(testSpace);
int initialCount = namespaceAdmin.list().size(); Assert.assertTrue(namespaceAdmin.exists(new NamespaceId(TEST_NAMESPACE1))); namespaceAdmin.create(TEST_NAMESPACE_META1); Assert.fail("Should not create duplicate namespace."); } catch (NamespaceAlreadyExistsException e) { namespaceAdmin.get(new NamespaceId("random")); Assert.fail("Namespace 'random' should not exist."); } catch (NamespaceNotFoundException e) { namespaceAdmin.create(null); Assert.fail("Namespace with null metadata should fail."); } catch (IllegalArgumentException e) { Assert.assertEquals(initialCount, namespaceAdmin.list().size()); Assert.assertFalse(namespaceAdmin.exists(new NamespaceId(namespace))); namespaceAdmin.create(builder.build()); Assert.fail("Namespace with no name should fail"); } catch (IllegalArgumentException e) { Assert.assertEquals(initialCount, namespaceAdmin.list().size()); Assert.assertFalse(namespaceAdmin.exists(namespaceId)); namespaceAdmin.create(builder.setName(namespace).build()); Assert.assertEquals(initialCount + 1, namespaceAdmin.list().size()); Assert.assertTrue(namespaceAdmin.exists(namespaceId));
NamespaceMeta nsMeta = new NamespaceMeta.Builder().setName(namespaceId) .setRootDirectory(customRoot).build(); namespaceAdmin.create(nsMeta); Assert.assertTrue(namespaceAdmin.exists(namespaceId)); namespaceAdmin.updateProperties(nsMeta.getNamespaceId(), new NamespaceMeta.Builder(nsMeta).setRootDirectory("/newloc").build()); Assert.fail(); namespaceAdmin.updateProperties(nsMeta.getNamespaceId(), new NamespaceMeta.Builder(nsMeta).setHBaseNamespace("custns").build()); Assert.fail(); namespaceAdmin.updateProperties(nsMeta.getNamespaceId(), new NamespaceMeta.Builder(nsMeta).setHiveDatabase("newDB").build()); Assert.fail(); namespaceAdmin.updateProperties(nsMeta.getNamespaceId(), new NamespaceMeta.Builder(nsMeta).setRootDirectory("").build()); Assert.fail(); namespaceAdmin.updateProperties(nsMeta.getNamespaceId(), new NamespaceMeta.Builder(nsMeta).setPrincipal("newPrincipal").build()); Assert.fail(); namespaceAdmin.updateProperties(nsMeta.getNamespaceId(), new NamespaceMeta.Builder(nsMeta).setKeytabURI("/new/keytab/uri").build()); Assert.fail();
@Override public void execute(EmptyArguments arguments) throws FileAlreadyExistsException { try { if (!namespaceAdmin.exists(NamespaceId.DEFAULT)) { namespaceAdmin.create(NamespaceMeta.DEFAULT); LOG.info("Successfully created namespace '{}'.", NamespaceMeta.DEFAULT); } } catch (FileAlreadyExistsException e) { // avoid retrying if its a FileAlreadyExistsException throw e; } catch (NamespaceAlreadyExistsException e) { // default namespace already exists, move on } catch (Exception e) { // the default namespace is valid so any exception here is transient and should be retried. throw new RetryableException(e); } }
@GET @Path("/namespaces/{namespace-id}") public void getNamespace(HttpRequest request, HttpResponder responder, @PathParam("namespace-id") String namespaceId) throws Exception { // return keytab URI without version NamespaceMeta ns = new NamespaceMeta.Builder(namespaceAdmin.get(new NamespaceId(namespaceId))).buildWithoutKeytabURIVersion(); responder.sendJson(HttpResponseStatus.OK, GSON.toJson(ns)); }
@Override public Boolean call() throws Exception { return injector.getInstance(NamespaceAdmin.class).exists(NamespaceId.DEFAULT); } }, 5, TimeUnit.SECONDS);
@PUT @Path("/namespaces/{namespace-id}/properties") @AuditPolicy(AuditDetail.REQUEST_BODY) public void updateNamespaceProperties(FullHttpRequest request, HttpResponder responder, @PathParam("namespace-id") String namespaceId) throws Exception { NamespaceMeta meta = getNamespaceMeta(request); namespaceAdmin.updateProperties(new NamespaceId(namespaceId), meta); responder.sendString(HttpResponseStatus.OK, String.format("Updated properties for namespace '%s'.", namespaceId)); }
setUpPrivilegeAndRegisterForDeletion(ALICE, neededPrivileges); getNamespaceAdmin().create(inputDatasetNS); getNamespaceAdmin().create(outputDatasetNS); addDatasetInstance(table1Id, "keyValueTable").create(); addDatasetInstance(table2Id, "keyValueTable").create(); getNamespaceAdmin().delete(inputDatasetNS.getNamespaceId()); getNamespaceAdmin().delete(outputDatasetNS.getNamespaceId());