private TopologyVersion addCurrentTopologyVersionInfo(Long topologyId, Long timestamp) { TopologyVersion versionInfo = new TopologyVersion(); versionInfo.setName(CURRENT_VERSION); versionInfo.setDescription(""); versionInfo.setTimestamp(timestamp); versionInfo.setTopologyId(topologyId); return addTopologyVersionInfo(versionInfo); }
public TopologyVersion(TopologyVersion other) { if (other != null) { setId(other.getId()); setTopologyId(other.getTopologyId()); setName(other.getName()); setDescription(other.getDescription()); setTimestamp(other.getTimestamp()); } }
public Optional<TopologyVersion> getLatestVersionInfo(Long topologyId) { Collection<TopologyVersion> versions = listTopologyVersionInfos(WSUtils.buildTopologyIdAwareQueryParams(topologyId, null)); return versions.stream() .filter(v -> !v.getName().equals(CURRENT_VERSION)) .max((versionInfo1, versionInfo2) -> { // compares the number part from version strings like V1, V2 ... return versionInfo1.getVersionNumber() - versionInfo2.getVersionNumber(); }); } public TopologyVersion getTopologyVersionInfo(Long versionId) {
public TopologyVersion getTopologyVersionInfo(Long versionId) { TopologyVersion topologyVersion = new TopologyVersion(); topologyVersion.setId(versionId); return dao.get(topologyVersion.getStorableKey()); }
versionInfo = new TopologyVersion(); versionInfo.setTopologyId(topologyId); Optional<TopologyVersion> latest = catalogService.getLatestVersionInfo(topologyId); int suffix; if (latest.isPresent()) { suffix = latest.get().getVersionNumber() + 1; } else { suffix = 1; versionInfo.setName(VERSION_PREFIX + suffix); if (versionInfo.getDescription() == null) { versionInfo.setDescription(""); currentVersion.get().getId(), versionInfo); catalogService.cloneTopologyVersion(topologyId, savedVersion.getId()); return WSUtils.respondEntity(savedVersion, CREATED); } catch (Exception ex) { catalogService.addOrUpdateTopologyVersionInfo(currentVersion.get().getId(), currentVersion.get());
public TopologyVersion addTopologyVersionInfo(TopologyVersion topologyVersion) { if (topologyVersion.getId() == null) { topologyVersion.setId(this.dao.nextId(TOPOLOGY_VERSIONINFO_NAMESPACE)); } if (topologyVersion.getTimestamp() == null) { topologyVersion.setTimestamp(System.currentTimeMillis()); } dao.add(topologyVersion); return topologyVersion; }
public TopologyVersion removeTopologyVersionInfo(Long versionId) { TopologyVersion topologyVersion = new TopologyVersion(); topologyVersion.setId(versionId); return dao.remove(new StorableKey(TOPOLOGY_VERSIONINFO_NAMESPACE, topologyVersion.getPrimaryKey())); }
public TopologyVersion addOrUpdateTopologyVersionInfo(Long versionId, TopologyVersion topologyVersion) { topologyVersion.setId(versionId); topologyVersion.setTimestamp(System.currentTimeMillis()); this.dao.addOrUpdate(topologyVersion); return topologyVersion; }
public Long getCurrentVersionId(Long topologyId) { Optional<TopologyVersion> versionInfo = getCurrentTopologyVersionInfo(topologyId); return versionInfo.isPresent() ? versionInfo.get().getId() : -1L; }
public Collection<TopologyEditorMetadata> listTopologyEditorMetadata() { List<TopologyEditorMetadata> metadatas = new ArrayList<>(); Collection<TopologyVersion> currentVersions = listCurrentTopologyVersionInfos(); for (TopologyVersion version : currentVersions) { List<QueryParam> queryParams = WSUtils.buildTopologyIdAndVersionIdAwareQueryParams( version.getTopologyId(), version.getId(), null); metadatas.addAll(listTopologyEditorMetadata(queryParams)); } return metadatas; }
public TopologyVersion updateVersionTimestamp(Long versionId, Long timestamp) { TopologyVersion topologyVersion = getTopologyVersionInfo(versionId); if (topologyVersion == null) { throw new IllegalStateException("No version with version Id " + versionId); } topologyVersion.setTimestamp(timestamp); dao.addOrUpdate(topologyVersion); return topologyVersion; }
/** * Lists the 'CURRENT' version of topologies */ public Collection<Topology> listTopologies() { List<Topology> topologies = new ArrayList<>(); for (TopologyVersion version: listCurrentTopologyVersionInfos()) { topologies.addAll(listTopologies(version.getId())); } return topologies; }
private void setupPlaceholderTopologyVersionInfo(StreamCatalogService catalogService) { if (transactionManager == null) throw new RuntimeException("TransactionManager is not initialized"); // it's one time setup hence just use it as local variable ManagedTransaction mt = new ManagedTransaction(transactionManager, TransactionIsolation.DEFAULT); try { mt.executeConsumer(() -> { TopologyVersion versionInfo = catalogService.getTopologyVersionInfo(StreamCatalogService.PLACEHOLDER_ID); if (versionInfo == null) { TopologyVersion topologyVersion = new TopologyVersion(); topologyVersion.setId(StreamCatalogService.PLACEHOLDER_ID); topologyVersion.setTopologyId(StreamCatalogService.PLACEHOLDER_ID); topologyVersion.setName("PLACEHOLDER_VERSIONINFO"); topologyVersion.setDescription("PLACEHOLDER_VERSIONINFO"); topologyVersion.setTimestamp(System.currentTimeMillis()); catalogService.addOrUpdateTopologyVersionInfo(StreamCatalogService.PLACEHOLDER_ID, topologyVersion); } }); } catch (Exception e) { throw new RuntimeException(e); } }
@POST @Path("/topologies/{topologyId}/versions/{versionId}/activate") @Timed public Response activateTopologyVersion(@PathParam("topologyId") Long topologyId, @PathParam("versionId") Long versionId, @Context SecurityContext securityContext) { SecurityUtil.checkRole(authorizer, securityContext, Roles.ROLE_TOPOLOGY_ADMIN); SecurityUtil.checkRoleOrPermissions(authorizer, securityContext, Roles.ROLE_TOPOLOGY_USER, NAMESPACE, topologyId, READ); Optional<TopologyVersion> currentVersionInfo = catalogService.getCurrentTopologyVersionInfo(topologyId); if (currentVersionInfo.isPresent() && currentVersionInfo.get().getId().equals(versionId)) { throw new IllegalArgumentException("Version id " + versionId + " is already the current version"); } TopologyVersion savedVersion = catalogService.getTopologyVersionInfo(versionId); if (savedVersion != null) { catalogService.cloneTopologyVersion(topologyId, savedVersion.getId()); /* * successfully cloned and set a new current version, * remove the old current version of topology and version info */ if (currentVersionInfo.isPresent()) { catalogService.removeTopology(topologyId, currentVersionInfo.get().getId(), true); } return WSUtils.respondEntity(savedVersion, CREATED); } throw EntityNotFoundException.byVersion(topologyId.toString(), versionId.toString()); }
private Response removeAllTopologyVersions(Long topologyId) { Collection<TopologyVersion> versions = catalogService.listTopologyVersionInfos( WSUtils.topologyVersionsQueryParam(topologyId)); Long currentVersionId = catalogService.getCurrentVersionId(topologyId); Topology res = null; for (TopologyVersion version : versions) { Topology removed = catalogService.removeTopology(topologyId, version.getId(), true); if (removed != null && removed.getVersionId().equals(currentVersionId)) { res = removed; } } // remove topology state information catalogService.removeTopologyState(topologyId); if (res != null) { return WSUtils.respondEntity(res, OK); } else { throw EntityNotFoundException.byId(topologyId.toString()); } }
public Topology addTopology(Topology topology) { validateTopology(topology); boolean storedPlaceholderVersionTopology = false; if (topology.getId() == null) { topology.setId(this.dao.nextId(TOPOLOGY_NAMESPACE)); topology.setVersionId(PLACEHOLDER_ID); this.dao.add(topology); LOG.debug("Added topology {} with placeholder version", topology); storedPlaceholderVersionTopology = true; } long timestamp = System.currentTimeMillis(); topology.setVersionTimestamp(timestamp); TopologyVersion versionInfo = addCurrentTopologyVersionInfo(topology.getId(), timestamp); LOG.debug("Added version info {}", versionInfo); if (storedPlaceholderVersionTopology) { // remove topology with placeholder version first // WARN: don't use removeTopology since it also removes PLACEHOLDER topology version info! removeOnlyTopologyEntity(topology.getId(), topology.getVersionId()); } // put actual version id topology.setVersionId(versionInfo.getId()); this.dao.addOrUpdate(topology); LOG.debug("Added topology {}", topology); return topology; }