protected MetadataTransactionContext doRecovery(ICcApplicationContext appCtx, MetadataTransactionContext mdTxnCtx) throws Exception { // Loop over datasets for (Dataverse dataverse : MetadataManager.INSTANCE.getDataverses(mdTxnCtx)) { mdTxnCtx = recoverDatasets(appCtx, mdTxnCtx, dataverse); // Fixes ASTERIXDB-2386 by caching the dataverse during recovery MetadataManager.INSTANCE.getDataverse(mdTxnCtx, dataverse.getDataverseName()); } return mdTxnCtx; }
private List<Dataset> getAllDatasetsForRebalance() throws Exception { List<Dataset> datasets = new ArrayList<>(); MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction(); try { List<Dataverse> dataverses = MetadataManager.INSTANCE.getDataverses(mdTxnCtx); for (Dataverse dv : dataverses) { datasets.addAll(getDatasetsInDataverseForRebalance(dv.getDataverseName(), mdTxnCtx)); } MetadataManager.INSTANCE.commitTransaction(mdTxnCtx); } catch (Exception e) { MetadataManager.INSTANCE.abortTransaction(mdTxnCtx); throw e; } return datasets; }
/** * Perform recovery of DDL operations metadata records */ public static void startDDLRecovery() throws AlgebricksException { // #. clean up any record which has pendingAdd/DelOp flag // as traversing all records from DATAVERSE_DATASET to DATASET_DATASET, and then // to INDEX_DATASET. MetadataTransactionContext mdTxnCtx = null; LOGGER.info("Starting DDL recovery ..."); try { mdTxnCtx = MetadataManager.INSTANCE.beginTransaction(); List<Dataverse> dataverses = MetadataManager.INSTANCE.getDataverses(mdTxnCtx); for (Dataverse dataverse : dataverses) { recoverDataverse(mdTxnCtx, dataverse); } MetadataManager.INSTANCE.commitTransaction(mdTxnCtx); LOGGER.info("Completed DDL recovery."); } catch (Exception e) { try { LOGGER.error("Failure during DDL recovery", e); MetadataManager.INSTANCE.abortTransaction(mdTxnCtx); } catch (Exception e2) { e.addSuppressed(e2); } throw MetadataException.create(e); } }
protected boolean isFunctionUsed(MetadataTransactionContext ctx, FunctionSignature signature, String currentDataverse) throws AlgebricksException { List<Dataverse> allDataverses = MetadataManager.INSTANCE.getDataverses(ctx); for (Dataverse dataverse : allDataverses) { if (dataverse.getDataverseName().equals(currentDataverse)) { continue; } List<Feed> feeds = MetadataManager.INSTANCE.getFeeds(ctx, dataverse.getDataverseName()); for (Feed feed : feeds) { List<FeedConnection> feedConnections = MetadataManager.INSTANCE.getFeedConections(ctx, dataverse.getDataverseName(), feed.getFeedName()); for (FeedConnection conn : feedConnections) { if (conn.containsFunction(signature)) { return true; } } } } return false; }