@Override public void upgrade(UpgradeContext context) throws Exception { final KVStoreProvider storeProvider = context.getKVStoreProvider(); final KVStore<byte[], NameSpaceContainer> namespace = storeProvider.getStore(NamespaceServiceImpl.NamespaceStoreCreator.class); final KVStore<DatasetSplitId, DatasetSplit> splitsStore = storeProvider.getStore(NamespaceServiceImpl.DatasetSplitCreator.class); int fixedSplitIds = 0; // namespace#find() returns entries ordered by depth, so sources will // be processed before folders, which will be processed before datasets for(Map.Entry<byte[], NameSpaceContainer> entry: namespace.find()) { final NameSpaceContainer container = entry.getValue(); if (container.getType() != NameSpaceContainer.Type.DATASET) { continue; } DatasetConfig config = entry.getValue().getDataset(); if (config.getType() == DatasetType.VIRTUAL_DATASET) { continue; } if (config.getReadDefinition() == null || config.getReadDefinition().getSplitVersion() == null) { continue; } if (!DatasetSplitId.mayRequireNewDatasetId(config)) { // Datasets which do not contain reserved characters are fine continue; } fixSplits(splitsStore, config); } System.out.printf(" Updated %d dataset splits with new ids.%n", fixedSplitIds); }