@VisibleForTesting static DatasetSplitId ofUnsafe(EntityId datasetId, long splitVersion, String splitKey) { final String datasetIdAsString = datasetId.getId(); String compoundSplitId = SPLIT_ID_JOINER.join(datasetIdAsString, splitVersion, splitKey); return new DatasetSplitId(compoundSplitId, datasetIdAsString, splitVersion, splitKey); } private DatasetSplitId(String compoundSplitId, String datasetId, long splitVersion, String splitKey) {
@JsonCreator public static DatasetSplitId of(String datasetSplitId) { final String[] ids = datasetSplitId.split(DELIMITER, 3); Preconditions.checkArgument(ids.length == 3 && !ids[0].isEmpty() && !ids[1].isEmpty() && !ids[2].isEmpty(), "Invalid dataset split id %s", datasetSplitId); // Some dataset split before upgrade might not have a valid version // but the compound key would still allow for the entry to be removed from the kvstore // so allowing it temporarily. // // See DX-13336 for details long version; try { version = Long.parseLong(ids[1]); } catch (NumberFormatException e) { version = Long.MIN_VALUE; } return new DatasetSplitId(datasetSplitId, unescape(ids[0]), version, ids[2]); }
@VisibleForTesting static DatasetSplitId of(EntityId datasetId, long splitVersion, String splitKey) { final String datasetIdAsString = escape(datasetId.getId()); String compoundSplitId = SPLIT_ID_JOINER.join(datasetIdAsString, splitVersion, splitKey); return new DatasetSplitId(compoundSplitId, datasetIdAsString, splitVersion, splitKey); }
/** * UNSAFE! Use {@code DatasetSplitId#getSplitRange(EntityId, long)} instead */ public static FindByRange<DatasetSplitId> unsafeGetSplitsRange(DatasetConfig config) { final long splitVersion = config.getReadDefinition().getSplitVersion(); final long nextSplitVersion = splitVersion + 1; final String datasetId = config.getId().getId(); // Unsafe way of constructing dataset split id!!! final DatasetSplitId start = new DatasetSplitId(SPLIT_ID_JOINER.join(datasetId, splitVersion, ""), datasetId, splitVersion, ""); final DatasetSplitId end = new DatasetSplitId(SPLIT_ID_JOINER.join(datasetId, nextSplitVersion, ""), datasetId, splitVersion, ""); return new FindByRange<DatasetSplitId>() .setStart(start, true) .setEnd(end, false); } /**