use of org.apache.nifi.registry.flow.VersionedFlowSnapshotMetadata in project nifi-registry by apache.
the class UnsecuredNiFiRegistryClientIT method testNiFiRegistryClient.
@Test
public void testNiFiRegistryClient() throws IOException, NiFiRegistryException {
// ---------------------- TEST BUCKETS --------------------------//
final BucketClient bucketClient = client.getBucketClient();
// create buckets
final int numBuckets = 10;
final List<Bucket> createdBuckets = new ArrayList<>();
for (int i = 0; i < numBuckets; i++) {
final Bucket createdBucket = createBucket(bucketClient, i);
LOGGER.info("Created bucket # " + i + " with id " + createdBucket.getIdentifier());
createdBuckets.add(createdBucket);
}
// get each bucket
for (final Bucket bucket : createdBuckets) {
final Bucket retrievedBucket = bucketClient.get(bucket.getIdentifier());
Assert.assertNotNull(retrievedBucket);
LOGGER.info("Retrieved bucket " + retrievedBucket.getIdentifier());
}
// final Bucket nonExistentBucket = bucketClient.get("does-not-exist");
// Assert.assertNull(nonExistentBucket);
// get bucket fields
final Fields bucketFields = bucketClient.getFields();
Assert.assertNotNull(bucketFields);
LOGGER.info("Retrieved bucket fields, size = " + bucketFields.getFields().size());
Assert.assertTrue(bucketFields.getFields().size() > 0);
// get all buckets
final List<Bucket> allBuckets = bucketClient.getAll();
LOGGER.info("Retrieved buckets, size = " + allBuckets.size());
Assert.assertEquals(numBuckets, allBuckets.size());
allBuckets.stream().forEach(b -> System.out.println("Retrieve bucket " + b.getIdentifier()));
// update each bucket
for (final Bucket bucket : createdBuckets) {
final Bucket bucketUpdate = new Bucket();
bucketUpdate.setIdentifier(bucket.getIdentifier());
bucketUpdate.setDescription(bucket.getDescription() + " UPDATE");
final Bucket updatedBucket = bucketClient.update(bucketUpdate);
Assert.assertNotNull(updatedBucket);
LOGGER.info("Updated bucket " + updatedBucket.getIdentifier());
}
// ---------------------- TEST FLOWS --------------------------//
final FlowClient flowClient = client.getFlowClient();
// create flows
final Bucket flowsBucket = createdBuckets.get(0);
final VersionedFlow flow1 = createFlow(flowClient, flowsBucket, 1);
LOGGER.info("Created flow # 1 with id " + flow1.getIdentifier());
final VersionedFlow flow2 = createFlow(flowClient, flowsBucket, 2);
LOGGER.info("Created flow # 2 with id " + flow2.getIdentifier());
// get flow
final VersionedFlow retrievedFlow1 = flowClient.get(flowsBucket.getIdentifier(), flow1.getIdentifier());
Assert.assertNotNull(retrievedFlow1);
LOGGER.info("Retrieved flow # 1 with id " + retrievedFlow1.getIdentifier());
final VersionedFlow retrievedFlow2 = flowClient.get(flowsBucket.getIdentifier(), flow2.getIdentifier());
Assert.assertNotNull(retrievedFlow2);
LOGGER.info("Retrieved flow # 2 with id " + retrievedFlow2.getIdentifier());
// update flows
final VersionedFlow flow1Update = new VersionedFlow();
flow1Update.setIdentifier(flow1.getIdentifier());
flow1Update.setName(flow1.getName() + " UPDATED");
final VersionedFlow updatedFlow1 = flowClient.update(flowsBucket.getIdentifier(), flow1Update);
Assert.assertNotNull(updatedFlow1);
LOGGER.info("Updated flow # 1 with id " + updatedFlow1.getIdentifier());
// get flow fields
final Fields flowFields = flowClient.getFields();
Assert.assertNotNull(flowFields);
LOGGER.info("Retrieved flow fields, size = " + flowFields.getFields().size());
Assert.assertTrue(flowFields.getFields().size() > 0);
// get flows in bucket
final List<VersionedFlow> flowsInBucket = flowClient.getByBucket(flowsBucket.getIdentifier());
Assert.assertNotNull(flowsInBucket);
Assert.assertEquals(2, flowsInBucket.size());
flowsInBucket.stream().forEach(f -> LOGGER.info("Flow in bucket, flow id " + f.getIdentifier()));
// ---------------------- TEST SNAPSHOTS --------------------------//
final FlowSnapshotClient snapshotClient = client.getFlowSnapshotClient();
// create snapshots
final VersionedFlow snapshotFlow = flow1;
final VersionedFlowSnapshot snapshot1 = createSnapshot(snapshotClient, snapshotFlow, 1);
LOGGER.info("Created snapshot # 1 with version " + snapshot1.getSnapshotMetadata().getVersion());
final VersionedFlowSnapshot snapshot2 = createSnapshot(snapshotClient, snapshotFlow, 2);
LOGGER.info("Created snapshot # 2 with version " + snapshot2.getSnapshotMetadata().getVersion());
// get snapshot
final VersionedFlowSnapshot retrievedSnapshot1 = snapshotClient.get(snapshotFlow.getBucketIdentifier(), snapshotFlow.getIdentifier(), 1);
Assert.assertNotNull(retrievedSnapshot1);
Assert.assertFalse(retrievedSnapshot1.isLatest());
LOGGER.info("Retrieved snapshot # 1 with version " + retrievedSnapshot1.getSnapshotMetadata().getVersion());
final VersionedFlowSnapshot retrievedSnapshot2 = snapshotClient.get(snapshotFlow.getBucketIdentifier(), snapshotFlow.getIdentifier(), 2);
Assert.assertNotNull(retrievedSnapshot2);
Assert.assertTrue(retrievedSnapshot2.isLatest());
LOGGER.info("Retrieved snapshot # 2 with version " + retrievedSnapshot2.getSnapshotMetadata().getVersion());
// get latest
final VersionedFlowSnapshot retrievedSnapshotLatest = snapshotClient.getLatest(snapshotFlow.getBucketIdentifier(), snapshotFlow.getIdentifier());
Assert.assertNotNull(retrievedSnapshotLatest);
Assert.assertEquals(snapshot2.getSnapshotMetadata().getVersion(), retrievedSnapshotLatest.getSnapshotMetadata().getVersion());
Assert.assertTrue(retrievedSnapshotLatest.isLatest());
LOGGER.info("Retrieved latest snapshot with version " + retrievedSnapshotLatest.getSnapshotMetadata().getVersion());
// get metadata
final List<VersionedFlowSnapshotMetadata> retrievedMetadata = snapshotClient.getSnapshotMetadata(snapshotFlow.getBucketIdentifier(), snapshotFlow.getIdentifier());
Assert.assertNotNull(retrievedMetadata);
Assert.assertEquals(2, retrievedMetadata.size());
Assert.assertEquals(2, retrievedMetadata.get(0).getVersion());
Assert.assertEquals(1, retrievedMetadata.get(1).getVersion());
retrievedMetadata.stream().forEach(s -> LOGGER.info("Retrieved snapshot metadata " + s.getVersion()));
// get latest metadata
final VersionedFlowSnapshotMetadata latestMetadata = snapshotClient.getLatestMetadata(snapshotFlow.getBucketIdentifier(), snapshotFlow.getIdentifier());
Assert.assertNotNull(latestMetadata);
Assert.assertEquals(2, latestMetadata.getVersion());
// get latest metadata that doesn't exist
try {
snapshotClient.getLatestMetadata(snapshotFlow.getBucketIdentifier(), "DOES-NOT-EXIST");
Assert.fail("Should have thrown exception");
} catch (NiFiRegistryException nfe) {
Assert.assertEquals("Error retrieving latest snapshot metadata: The specified flow ID does not exist in this bucket.", nfe.getMessage());
}
// ---------------------- TEST ITEMS --------------------------//
final ItemsClient itemsClient = client.getItemsClient();
// get fields
final Fields itemFields = itemsClient.getFields();
Assert.assertNotNull(itemFields.getFields());
Assert.assertTrue(itemFields.getFields().size() > 0);
// get all items
final List<BucketItem> allItems = itemsClient.getAll();
Assert.assertEquals(2, allItems.size());
allItems.stream().forEach(i -> Assert.assertNotNull(i.getBucketName()));
allItems.stream().forEach(i -> LOGGER.info("All items, item " + i.getIdentifier()));
// get items for bucket
final List<BucketItem> bucketItems = itemsClient.getByBucket(flowsBucket.getIdentifier());
Assert.assertEquals(2, bucketItems.size());
allItems.stream().forEach(i -> Assert.assertNotNull(i.getBucketName()));
bucketItems.stream().forEach(i -> LOGGER.info("Items in bucket, item " + i.getIdentifier()));
// ----------------------- TEST DIFF ---------------------------//
final VersionedFlowSnapshot snapshot3 = buildSnapshot(snapshotFlow, 3);
final VersionedProcessGroup newlyAddedPG = new VersionedProcessGroup();
newlyAddedPG.setIdentifier("new-pg");
newlyAddedPG.setName("NEW Process Group");
snapshot3.getFlowContents().getProcessGroups().add(newlyAddedPG);
snapshotClient.create(snapshot3);
VersionedFlowDifference diff = flowClient.diff(snapshotFlow.getBucketIdentifier(), snapshotFlow.getIdentifier(), 3, 2);
Assert.assertNotNull(diff);
Assert.assertEquals(1, diff.getComponentDifferenceGroups().size());
// ---------------------- DELETE DATA --------------------------//
final VersionedFlow deletedFlow1 = flowClient.delete(flowsBucket.getIdentifier(), flow1.getIdentifier());
Assert.assertNotNull(deletedFlow1);
LOGGER.info("Deleted flow " + deletedFlow1.getIdentifier());
final VersionedFlow deletedFlow2 = flowClient.delete(flowsBucket.getIdentifier(), flow2.getIdentifier());
Assert.assertNotNull(deletedFlow2);
LOGGER.info("Deleted flow " + deletedFlow2.getIdentifier());
// delete each bucket
for (final Bucket bucket : createdBuckets) {
final Bucket deletedBucket = bucketClient.delete(bucket.getIdentifier());
Assert.assertNotNull(deletedBucket);
LOGGER.info("Deleted bucket " + deletedBucket.getIdentifier());
}
Assert.assertEquals(0, bucketClient.getAll().size());
LOGGER.info("!!! SUCCESS !!!");
}
use of org.apache.nifi.registry.flow.VersionedFlowSnapshotMetadata in project nifi-registry by apache.
the class BucketFlowResource method getLatestFlowVersion.
@GET
@Path("{flowId}/versions/latest")
@Consumes(MediaType.WILDCARD)
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Get the latest version of a flow", response = VersionedFlowSnapshot.class, extensions = { @Extension(name = "access-policy", properties = { @ExtensionProperty(name = "action", value = "read"), @ExtensionProperty(name = "resource", value = "/buckets/{bucketId}") }) })
@ApiResponses({ @ApiResponse(code = 401, message = HttpStatusMessages.MESSAGE_401), @ApiResponse(code = 403, message = HttpStatusMessages.MESSAGE_403), @ApiResponse(code = 404, message = HttpStatusMessages.MESSAGE_404), @ApiResponse(code = 409, message = HttpStatusMessages.MESSAGE_409) })
public Response getLatestFlowVersion(@PathParam("bucketId") @ApiParam("The bucket identifier") final String bucketId, @PathParam("flowId") @ApiParam("The flow identifier") final String flowId) {
authorizeBucketAccess(RequestAction.READ, bucketId);
final VersionedFlowSnapshotMetadata latestMetadata = registryService.getLatestFlowSnapshotMetadata(bucketId, flowId);
final VersionedFlowSnapshot lastSnapshot = registryService.getFlowSnapshot(bucketId, flowId, latestMetadata.getVersion());
populateLinksAndPermissions(lastSnapshot);
return Response.status(Response.Status.OK).entity(lastSnapshot).build();
}
use of org.apache.nifi.registry.flow.VersionedFlowSnapshotMetadata in project nifi-registry by apache.
the class BucketFlowResource method setSnaphotMetadataIfMissing.
private static void setSnaphotMetadataIfMissing(@NotNull String bucketIdParam, @NotNull String flowIdParam, @NotNull VersionedFlowSnapshot flowSnapshot) {
VersionedFlowSnapshotMetadata metadata = flowSnapshot.getSnapshotMetadata();
if (metadata == null) {
metadata = new VersionedFlowSnapshotMetadata();
}
if (metadata.getBucketIdentifier() == null) {
metadata.setBucketIdentifier(bucketIdParam);
}
if (metadata.getFlowIdentifier() == null) {
metadata.setFlowIdentifier(flowIdParam);
}
flowSnapshot.setSnapshotMetadata(metadata);
}
use of org.apache.nifi.registry.flow.VersionedFlowSnapshotMetadata in project nifi-registry by apache.
the class TestRestAPI method createSnapshot.
private static VersionedFlowSnapshot createSnapshot(Client client, VersionedFlow flow, int num) {
final VersionedFlowSnapshotMetadata snapshotMetadata1 = new VersionedFlowSnapshotMetadata();
snapshotMetadata1.setBucketIdentifier(flow.getBucketIdentifier());
snapshotMetadata1.setFlowIdentifier(flow.getIdentifier());
snapshotMetadata1.setVersion(num);
snapshotMetadata1.setComments("This is snapshot #" + num);
final VersionedProcessGroup snapshotContents1 = new VersionedProcessGroup();
snapshotContents1.setIdentifier("pg1");
snapshotContents1.setName("Process Group 1");
final VersionedFlowSnapshot snapshot1 = new VersionedFlowSnapshot();
snapshot1.setSnapshotMetadata(snapshotMetadata1);
snapshot1.setFlowContents(snapshotContents1);
final VersionedFlowSnapshot createdSnapshot = client.target(REGISTRY_API_BUCKETS_URL).path("{bucketId}/flows/{flowId}/versions").resolveTemplate("bucketId", flow.getBucketIdentifier()).resolveTemplate("flowId", flow.getIdentifier()).request().post(Entity.entity(snapshot1, MediaType.APPLICATION_JSON_TYPE), VersionedFlowSnapshot.class);
return createdSnapshot;
}
use of org.apache.nifi.registry.flow.VersionedFlowSnapshotMetadata in project nifi-registry by apache.
the class TestLinkService method setup.
@Before
public void setup() {
linkService = new LinkService();
// setup buckets
final Bucket bucket1 = new Bucket();
bucket1.setIdentifier("b1");
bucket1.setName("Bucket 1");
final Bucket bucket2 = new Bucket();
bucket2.setIdentifier("b2");
bucket2.setName("Bucket 2");
buckets = new ArrayList<>();
buckets.add(bucket1);
buckets.add(bucket2);
// setup flows
final VersionedFlow flow1 = new VersionedFlow();
flow1.setIdentifier("f1");
flow1.setName("Flow 1");
flow1.setBucketIdentifier(bucket1.getIdentifier());
final VersionedFlow flow2 = new VersionedFlow();
flow2.setIdentifier("f2");
flow2.setName("Flow 2");
flow2.setBucketIdentifier(bucket1.getIdentifier());
flows = new ArrayList<>();
flows.add(flow1);
flows.add(flow2);
// setup snapshots
final VersionedFlowSnapshotMetadata snapshotMetadata1 = new VersionedFlowSnapshotMetadata();
snapshotMetadata1.setFlowIdentifier(flow1.getIdentifier());
snapshotMetadata1.setVersion(1);
snapshotMetadata1.setBucketIdentifier(bucket1.getIdentifier());
final VersionedFlowSnapshotMetadata snapshotMetadata2 = new VersionedFlowSnapshotMetadata();
snapshotMetadata2.setFlowIdentifier(flow1.getIdentifier());
snapshotMetadata2.setVersion(2);
snapshotMetadata2.setBucketIdentifier(bucket1.getIdentifier());
snapshots = new ArrayList<>();
snapshots.add(snapshotMetadata1);
snapshots.add(snapshotMetadata2);
// setup items
items = new ArrayList<>();
items.add(flow1);
items.add(flow2);
}
Aggregations