1 package org.openecomp.core.migration;
3 import com.amdocs.zusammen.datatypes.SessionContext;
4 import com.amdocs.zusammen.datatypes.UserInfo;
5 import com.amdocs.zusammen.plugin.statestore.cassandra.dao.impl.ItemCassandraDao;
6 import com.amdocs.zusammen.plugin.statestore.cassandra.dao.impl.VersionCassandraDao;
7 import org.openecomp.core.migration.convertors.ComponentConvertor;
8 import org.openecomp.core.migration.convertors.EntitlementPoolConvertor;
9 import org.openecomp.core.migration.convertors.FeatureGroupConvertor;
10 import org.openecomp.core.migration.convertors.LKGConvertor;
11 import org.openecomp.core.migration.convertors.LicenseAgreementConvertor;
12 import org.openecomp.core.migration.convertors.MibConvertor;
13 import org.openecomp.core.migration.convertors.NetworkConvertor;
14 import org.openecomp.core.migration.convertors.NicConvertor;
15 import org.openecomp.core.migration.convertors.OrchestrationTemplateCandidateConvertor;
16 import org.openecomp.core.migration.convertors.ProcessConvertor;
17 import org.openecomp.core.migration.convertors.VlmConvertor;
18 import org.openecomp.core.migration.convertors.VspInformationConvertor;
19 import org.openecomp.core.migration.convertors.VspServiceArtifactConvertor;
20 import org.openecomp.core.migration.convertors.VspServiceTemplateConvertor;
21 import org.openecomp.core.migration.loaders.ComponentCassandraLoader;
22 import org.openecomp.core.migration.loaders.EntitlementPoolCassandraLoader;
23 import org.openecomp.core.migration.loaders.FeatureGroupCassandraLoader;
24 import org.openecomp.core.migration.loaders.LKGCassandraLoader;
25 import org.openecomp.core.migration.loaders.LicenseAgreementCassandraLoader;
26 import org.openecomp.core.migration.loaders.MibCassandraLoader;
27 import org.openecomp.core.migration.loaders.NetworkCassandraLoader;
28 import org.openecomp.core.migration.loaders.NicCassandraLoader;
29 import org.openecomp.core.migration.loaders.OrchestrationTemplateCandidateCassandraLoader;
30 import org.openecomp.core.migration.loaders.ProcessCassandraLoader;
31 import org.openecomp.core.migration.loaders.ServiceArtifactCassandraLoader;
32 import org.openecomp.core.migration.loaders.ServiceTemplateCassandraLoader;
33 import org.openecomp.core.migration.loaders.VendorLicenseModelCassandraLoader;
34 import org.openecomp.core.migration.loaders.VendorSoftwareProductInfoLoader;
35 import org.openecomp.core.migration.loaders.VersionInfoCassandraLoader;
36 import org.openecomp.core.migration.loaders.VspInformation;
37 import org.openecomp.core.migration.store.ElementHandler;
38 import org.openecomp.core.migration.store.ItemHandler;
39 import org.openecomp.core.migration.util.marker.MigrationMarker;
40 import org.openecomp.core.model.types.ServiceArtifact;
41 import org.openecomp.core.model.types.ServiceTemplate;
42 import org.openecomp.core.zusammen.impl.CassandraConnectionInitializer;
43 import org.openecomp.core.zusammen.plugin.dao.impl.CassandraElementRepository;
44 import org.openecomp.sdc.logging.api.Logger;
45 import org.openecomp.sdc.logging.api.LoggerFactory;
46 import org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity;
47 import org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity;
48 import org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity;
49 import org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity;
50 import org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity;
51 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
52 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentMonitoringUploadEntity;
53 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity;
54 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity;
55 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity;
56 import org.openecomp.sdc.versioning.dao.types.Version;
57 import org.openecomp.sdc.versioning.dao.types.VersionInfoEntity;
59 import java.time.Duration;
60 import java.time.Instant;
61 import java.util.Collection;
62 import java.util.Date;
63 import java.util.HashMap;
66 import static org.openecomp.core.migration.util.Utils.printMessage;
68 public class MigrationMain {
69 private static final String GLOBAL_USER = "GLOBAL_USER";
70 private static Logger logger = LoggerFactory.getLogger(MigrationMain.class);
71 private static int status = 0;
73 private static Map<String, VersionInfoEntity> versionInfoMap = new HashMap<>();
75 public static void main(String[] args) {
76 CassandraElementRepository cassandraElementRepository = new CassandraElementRepository();
77 CassandraConnectionInitializer.setCassandraConnectionPropertiesToSystem();
78 printMessage(logger, "Checking whether a migration has already been run.");
79 if (MigrationMarker.isMigrated()) {
80 printMessage(logger, "The DB has already been migrated, this script will now exit.");
83 ItemCassandraDao itemCassandraDao = new ItemCassandraDao();
84 VersionCassandraDao versionCassandraDao = new VersionCassandraDao();
85 SessionContext context = new SessionContext();
86 context.setUser(new UserInfo(GLOBAL_USER));
87 context.setTenant("dox");
88 printMessage(logger, "Starting migration.\n");
89 Instant startTime = Instant.now();
91 migrateToZusammen(cassandraElementRepository, itemCassandraDao, versionCassandraDao, context);
93 Instant stopTime = Instant.now();
94 Duration duration = Duration.between(startTime, stopTime);
95 long minutesPart = duration.toMinutes();
96 long secondsPart = duration.minusMinutes(minutesPart).getSeconds();
99 MigrationMarker.markMigrated();
102 "Migration finished . Total run time was : " + minutesPart + ":" + secondsPart
108 private static void migrateToZusammen(CassandraElementRepository cassandraElementRepository,
109 ItemCassandraDao itemCassandraDao,
110 VersionCassandraDao versionCassandraDao,
111 SessionContext context) {
116 convertVsp(context, itemCassandraDao, versionCassandraDao, cassandraElementRepository);
117 printMessage(logger, "Converted VSPs\n");
118 } catch (Exception e) {
119 logger.debug(e.getMessage(), e);
124 convertOrchestrationTemplateCandidate(context, cassandraElementRepository);
125 printMessage(logger, "Converted OrchestrationTemplateCandidates\n");
126 } catch (Exception e) {
127 logger.debug(e.getMessage(), e);
133 convertComponent(context, cassandraElementRepository);
134 printMessage(logger, "Converted Components\n");
135 } catch (Exception e) {
136 logger.debug(e.getMessage(), e);
140 convertNic(context, cassandraElementRepository);
141 printMessage(logger, "Converted Nics\n");
142 } catch (Exception e) {
143 logger.debug(e.getMessage(), e);
147 convertNetwork(context, cassandraElementRepository);
148 printMessage(logger, "Converted Networks\n");
149 } catch (Exception e) {
150 logger.debug(e.getMessage(), e);
154 convertMibs(context, cassandraElementRepository);
155 printMessage(logger, "Converted MIBs\n");
156 } catch (Exception e) {
157 logger.debug(e.getMessage(), e);
161 convertServiceArtifact(context, cassandraElementRepository);
162 printMessage(logger, "Converted Service Artifacts\n");
163 } catch (Exception e) {
164 logger.debug(e.getMessage(), e);
168 convertServiceTemplate(context, cassandraElementRepository);
169 printMessage(logger, "Converted Service Templates\n");
170 } catch (Exception e) {
171 logger.debug(e.getMessage(), e);
175 convertProcesses(context, cassandraElementRepository);
176 printMessage(logger, "Converted Processes\n");
177 } catch (Exception e) {
178 logger.debug(e.getMessage(), e);
184 convertVlm(context, itemCassandraDao, versionCassandraDao, cassandraElementRepository);
185 printMessage(logger, "Converted VLMs\n");
186 } catch (Exception e) {
187 logger.debug(e.getMessage(), e);
191 convertLKG(context, cassandraElementRepository);
192 printMessage(logger, "Converted LKGs\n");
193 } catch (Exception e) {
194 logger.debug(e.getMessage(), e);
198 convertFeatureGroup(context, cassandraElementRepository);
199 printMessage(logger, "Converted Feature Groups\n");
200 } catch (Exception e) {
201 logger.debug(e.getMessage(), e);
205 convertEP(context, cassandraElementRepository);
206 printMessage(logger, "Converted EPs\n");
207 } catch (Exception e) {
208 logger.debug(e.getMessage(), e);
212 convertLicenseAgreement(context, cassandraElementRepository);
213 printMessage(logger, "Converted License Agreements\n");
214 } catch (Exception e) {
215 logger.debug(e.getMessage(), e);
220 private static void convertOrchestrationTemplateCandidate(SessionContext context,
221 CassandraElementRepository cassandraElementRepository) {
222 OrchestrationTemplateCandidateCassandraLoader orchestrationTemplateCandidateCassandraLoader =
223 new OrchestrationTemplateCandidateCassandraLoader();
225 orchestrationTemplateCandidateCassandraLoader.list().stream()
226 .filter(entity -> needMigration(entity.getId(), entity.getVersion()) &&
227 entity.getContentData()!=null && entity.getFilesDataStructure()!=null)
228 .forEach(entity -> ElementHandler
229 .save(context, cassandraElementRepository, entity.getId(), entity.getVersion(),
230 OrchestrationTemplateCandidateConvertor
231 .convertOrchestrationTemplateCandidateToElement(entity)));
234 private static void loadVersionInfo() {
236 VersionInfoCassandraLoader versionInfoCassandraLoader = new VersionInfoCassandraLoader();
237 Collection<VersionInfoEntity> versions =
238 versionInfoCassandraLoader.list();
240 versions.forEach(versionInfoEntity -> versionInfoMap.put(versionInfoEntity.getEntityId
241 (), versionInfoEntity));
246 private static void convertMibs(SessionContext context,
247 CassandraElementRepository cassandraElementRepository) {
248 MibCassandraLoader cassandraLoader = new MibCassandraLoader();
249 Collection<ComponentMonitoringUploadEntity> mibs = cassandraLoader.list();
250 mibs.stream().filter(mibEntity -> needMigration(mibEntity.getVspId(), mibEntity.getVersion()))
253 ElementHandler.save(context, cassandraElementRepository,
255 .getVspId(), mibEntity.getVersion(),
256 MibConvertor.convertMibToElement
261 private static void convertProcesses(SessionContext context,
262 CassandraElementRepository cassandraElementRepository) {
263 ProcessCassandraLoader cassandraLoader = new ProcessCassandraLoader();
264 Collection<ProcessEntity> processes = cassandraLoader.list();
266 .filter(processEntity -> needMigration(processEntity.getVspId(), processEntity.getVersion
267 ())).forEach(processEntity -> {
270 cassandraElementRepository,
272 .getId(), processEntity.getVersion(),
273 ProcessConvertor.convertProcessToElement(processEntity));
277 private static void convertVsp(SessionContext context, ItemCassandraDao itemCassandraDao,
278 VersionCassandraDao versionCassandraDao,
279 CassandraElementRepository cassandraElementRepository) {
280 VendorSoftwareProductInfoLoader vendorSoftwareProductInfoLoader = new
281 VendorSoftwareProductInfoLoader();
282 Collection<VspInformation> vsps =
283 vendorSoftwareProductInfoLoader.list();
284 vsps.stream().filter(vspInformation -> needMigration(vspInformation.getId(),
285 vspInformation.getVersion())).forEach
288 ItemHandler.save(context,
291 vspInformation.getId(), vspInformation
293 VspInformationConvertor
296 VspInformationConvertor.getItemVersionData(vspInformation),
297 vspInformation.getWritetimeMicroSeconds()));
299 vsps.stream().filter(vspInformation -> needMigration(vspInformation.getId(),
300 vspInformation.getVersion()))
301 .forEach(vspInformation -> ElementHandler.save(context, cassandraElementRepository,
302 vspInformation.getId(), vspInformation.getVersion(),
303 VspInformationConvertor.convertVspToElement
307 private static void convertVlm(SessionContext context, ItemCassandraDao itemCassandraDao,
308 VersionCassandraDao versionCassandraDao,
309 CassandraElementRepository cassandraElementRepository) {
310 VendorLicenseModelCassandraLoader
311 vendorLicenseModelCassandraDao = new VendorLicenseModelCassandraLoader();
312 Collection<VendorLicenseModelEntity> vlms =
313 vendorLicenseModelCassandraDao.list();
314 vlms.stream().filter(vlm -> needMigration(vlm.getId(), vlm.getVersion())).forEach(vlmEntity ->
316 (context, itemCassandraDao,
318 vlmEntity.getId(), vlmEntity.getVersion(),
319 VlmConvertor.getVlmInfo
321 VlmConvertor.getItemVersionData(vlmEntity), new Date().getTime()));
322 vlms.stream().filter(vlm -> needMigration(vlm.getId(), vlm.getVersion()))
323 .forEach(vlmEntity -> ElementHandler.save(context, cassandraElementRepository,
324 vlmEntity.getId(), vlmEntity.getVersion(),
325 VlmConvertor.convertVlmToElement
330 private static void convertNic(SessionContext context,
331 CassandraElementRepository cassandraElementRepository) {
332 NicCassandraLoader nicCassandraLoader = new NicCassandraLoader();
333 Collection<NicEntity> nics = nicCassandraLoader.list();
334 nics.stream().filter(entity -> needMigration(entity.getVspId(), entity.getVersion
335 ())).forEach(nicEntity -> ElementHandler.save(context, cassandraElementRepository,
336 nicEntity.getVspId(), nicEntity.getVersion(), NicConvertor.convertNicToElement
341 private static void convertNetwork(SessionContext context,
342 CassandraElementRepository cassandraElementRepository) {
343 NetworkCassandraLoader networkCassandraLoader = new NetworkCassandraLoader();
344 Collection<NetworkEntity> networks = networkCassandraLoader.list();
345 networks.stream().filter(entity -> needMigration(entity.getVspId(), entity.getVersion
346 ())).forEach(networkEntity -> ElementHandler.save(context, cassandraElementRepository,
347 networkEntity.getVspId(), networkEntity.getVersion(), NetworkConvertor
348 .convertNetworkToElement(networkEntity)));
352 private static void convertComponent(SessionContext context,
353 CassandraElementRepository cassandraElementRepository) {
354 ComponentCassandraLoader componentCassandraLoader = new ComponentCassandraLoader();
355 Collection<ComponentEntity> components = componentCassandraLoader.list();
356 components.stream().filter(entity -> needMigration(entity.getVspId(), entity.getVersion
357 ())).forEach(componentEntity -> ElementHandler.save(context, cassandraElementRepository,
359 .getVspId(), componentEntity.getVersion(), ComponentConvertor
360 .convertComponentToElement(componentEntity)));
364 private static void convertServiceArtifact(SessionContext context,
365 CassandraElementRepository cassandraElementRepository) {
366 ServiceArtifactCassandraLoader serviceArtifactCassandraLoader =
367 new ServiceArtifactCassandraLoader();
368 Collection<ServiceArtifact> serviceArtifacts = serviceArtifactCassandraLoader.list();
369 serviceArtifacts.stream().filter(entity -> needMigration(entity.getVspId(), entity.getVersion
370 ())).forEach(serviceArtifact -> ElementHandler.save(context,
371 cassandraElementRepository,
373 .getVspId(), serviceArtifact.getVersion(),
374 VspServiceArtifactConvertor
375 .convertServiceArtifactToElement(serviceArtifact)));
379 private static void convertServiceTemplate(SessionContext context,
380 CassandraElementRepository cassandraElementRepository) {
381 ServiceTemplateCassandraLoader serviceTemplateCassandraLoader =
382 new ServiceTemplateCassandraLoader();
383 Collection<ServiceTemplate> serviceTemplates = serviceTemplateCassandraLoader.list();
384 serviceTemplates.stream().filter(entity -> needMigration(entity.getVspId(), entity.getVersion
385 ())).forEach(serviceTemplate -> ElementHandler.save(context,
386 cassandraElementRepository,
388 .getVspId(), serviceTemplate.getVersion(),
389 VspServiceTemplateConvertor
390 .convertServiceTemplateToElement(serviceTemplate)));
394 private static void convertLKG(SessionContext context,
395 CassandraElementRepository cassandraElementRepository) {
396 LKGCassandraLoader LKGCassandraLoader = new LKGCassandraLoader();
397 Collection<LicenseKeyGroupEntity> lkgs = LKGCassandraLoader.list();
398 lkgs.stream().filter(entity -> needMigration(entity.getVendorLicenseModelId(), entity.getVersion
400 .forEach(licenseKeyGroupEntity -> ElementHandler.save(context, cassandraElementRepository,
401 licenseKeyGroupEntity
402 .getVendorLicenseModelId(), licenseKeyGroupEntity.getVersion(),
403 LKGConvertor.convertLKGToElement
404 (licenseKeyGroupEntity)));
407 private static void convertEP(SessionContext context,
408 CassandraElementRepository cassandraElementRepository) {
409 EntitlementPoolCassandraLoader entitlementPoolCassandraLoader =
410 new EntitlementPoolCassandraLoader();
411 Collection<EntitlementPoolEntity> entitlementPools = entitlementPoolCassandraLoader.list();
412 entitlementPools.stream()
413 .filter(entity -> needMigration(entity.getVendorLicenseModelId(), entity.getVersion
415 .forEach(entitlementPoolEntity -> ElementHandler.save(context, cassandraElementRepository,
416 entitlementPoolEntity
417 .getVendorLicenseModelId(), entitlementPoolEntity.getVersion(),
418 EntitlementPoolConvertor.convertEntitlementPoolToElement(entitlementPoolEntity)));
421 private static void convertFeatureGroup(SessionContext context,
422 CassandraElementRepository cassandraElementRepository) {
423 FeatureGroupCassandraLoader featureGroupCassandraLoader = new FeatureGroupCassandraLoader();
424 Collection<FeatureGroupEntity> featureGroupEntities = featureGroupCassandraLoader.list();
425 featureGroupEntities.stream()
426 .filter(entity -> needMigration(entity.getVendorLicenseModelId(), entity.getVersion
428 .forEach(featureGroupEntity -> ElementHandler.save(context, cassandraElementRepository,
430 .getVendorLicenseModelId(), featureGroupEntity.getVersion(),
431 FeatureGroupConvertor.convertFeatureGroupToElement(featureGroupEntity)));
434 private static void convertLicenseAgreement(SessionContext context,
435 CassandraElementRepository cassandraElementRepository) {
436 LicenseAgreementCassandraLoader licenseAgreementCassandraLoader =
437 new LicenseAgreementCassandraLoader();
438 Collection<LicenseAgreementEntity> licenseAgreementEntities =
439 licenseAgreementCassandraLoader.list();
440 licenseAgreementEntities.stream()
441 .filter(entity -> needMigration(entity.getVendorLicenseModelId(), entity.getVersion
443 .forEach(licenseAgreementEntity -> ElementHandler.save(context, cassandraElementRepository,
444 licenseAgreementEntity
445 .getVendorLicenseModelId(), licenseAgreementEntity.getVersion(),
446 LicenseAgreementConvertor.convertLicenseAgreementToElement(licenseAgreementEntity)));
450 private static boolean needMigration(String itemId, Version versionId) {
452 VersionInfoEntity versionInfo =
453 MigrationMain.versionInfoMap.get(itemId);
454 if (versionInfo == null) {
455 printMessage(logger, "ItemId: " + itemId + " is not in version_info table.");
458 return (versionInfo.getCandidate() != null && versionId.equals(versionInfo.getCandidate()
461 .getViewableVersions() != null && versionInfo
462 .getViewableVersions().contains(versionId));
465 public static Map<String, VersionInfoEntity> getVersionInfoMap()
467 return versionInfoMap;