@Override public void validateStream(StreamSpec streamSpec) throws StreamValidationException { LOG.info("About to validate stream = " + streamSpec); String streamName = streamSpec.getPhysicalName(); SystemStreamMetadata systemStreamMetadata = getSystemStreamMetadata(Collections.singleton(streamName)).get(streamName); if (systemStreamMetadata == null) { throw new StreamValidationException( "Failed to obtain metadata for stream " + streamName + ". Validation failed."); } int actualPartitionCounter = systemStreamMetadata.getSystemStreamPartitionMetadata().size(); int expectedPartitionCounter = streamSpec.getPartitionCount(); LOG.info("actualCount=" + actualPartitionCounter + "; expectedCount=" + expectedPartitionCounter); if (actualPartitionCounter != expectedPartitionCounter) { throw new StreamValidationException( String.format("Mismatch of partitions for stream %s. Expected %d, got %d. Validation failed.", streamName, expectedPartitionCounter, actualPartitionCounter)); } }
@Override public void validateStream(StreamSpec streamSpec) throws StreamValidationException { LOG.info("About to validate stream = " + streamSpec); String streamName = streamSpec.getPhysicalName(); SystemStreamMetadata systemStreamMetadata = getSystemStreamMetadata(Collections.singleton(streamName)).get(streamName); if (systemStreamMetadata == null) { throw new StreamValidationException( "Failed to obtain metadata for stream " + streamName + ". Validation failed."); } int actualPartitionCounter = systemStreamMetadata.getSystemStreamPartitionMetadata().size(); int expectedPartitionCounter = streamSpec.getPartitionCount(); LOG.info("actualCount=" + actualPartitionCounter + "; expectedCount=" + expectedPartitionCounter); if (actualPartitionCounter != expectedPartitionCounter) { throw new StreamValidationException( String.format("Mismatch of partitions for stream %s. Expected %d, got %d. Validation failed.", streamName, expectedPartitionCounter, actualPartitionCounter)); } }
@Override public void validateStream(StreamSpec streamSpec) throws StreamValidationException { LOG.info("About to validate stream = " + streamSpec); String streamName = streamSpec.getPhysicalName(); SystemStreamMetadata systemStreamMetadata = getSystemStreamMetadata(Collections.singleton(streamName)).get(streamName); if (systemStreamMetadata == null) { throw new StreamValidationException( "Failed to obtain metadata for stream " + streamName + ". Validation failed."); } int actualPartitionCounter = systemStreamMetadata.getSystemStreamPartitionMetadata().size(); int expectedPartitionCounter = streamSpec.getPartitionCount(); LOG.info("actualCount=" + actualPartitionCounter + "; expectedCount=" + expectedPartitionCounter); if (actualPartitionCounter != expectedPartitionCounter) { throw new StreamValidationException( String.format("Mismatch of partitions for stream %s. Expected %d, got %d. Validation failed.", streamName, expectedPartitionCounter, actualPartitionCounter)); } }
@Test(expected = StreamValidationException.class) public void testStartFailsOnTopicValidationErrors() { KafkaStreamSpec checkpointSpec = new KafkaStreamSpec(CHECKPOINT_TOPIC, CHECKPOINT_TOPIC, CHECKPOINT_SYSTEM, 1); // create an admin that throws an exception during validateStream SystemAdmin mockAdmin = newAdmin("0", "10"); doThrow(new StreamValidationException("invalid stream")).when(mockAdmin).validateStream(checkpointSpec); SystemFactory factory = newFactory(mock(SystemProducer.class), mock(SystemConsumer.class), mockAdmin); KafkaCheckpointManager checkpointManager = new KafkaCheckpointManager(checkpointSpec, factory, true, mock(Config.class), mock(MetricsRegistry.class), null, new KafkaCheckpointLogKeySerde()); // expect an exception during startup checkpointManager.createResources(); checkpointManager.start(); }
/** * Converts a StreamSpec into a KafakStreamSpec. Special handling for coordinator and changelog stream. * @param spec a StreamSpec object * @return KafkaStreamSpec object */ public KafkaStreamSpec toKafkaSpec(StreamSpec spec) { KafkaStreamSpec kafkaSpec; if (spec.isChangeLogStream()) { String topicName = spec.getPhysicalName(); ChangelogInfo topicMeta = changelogTopicMetaInformation.get(topicName); if (topicMeta == null) { throw new StreamValidationException("Unable to find topic information for topic " + topicName); } kafkaSpec = new KafkaStreamSpec(spec.getId(), topicName, systemName, spec.getPartitionCount(), topicMeta.replicationFactor(), topicMeta.kafkaProps()); } else if (spec.isCoordinatorStream()) { kafkaSpec = new KafkaStreamSpec(spec.getId(), spec.getPhysicalName(), systemName, 1, coordinatorStreamReplicationFactor, coordinatorStreamProperties); } else if (intermediateStreamProperties.containsKey(spec.getId())) { kafkaSpec = KafkaStreamSpec.fromSpec(spec).copyWithProperties(intermediateStreamProperties.get(spec.getId())); } else { kafkaSpec = KafkaStreamSpec.fromSpec(spec); } return kafkaSpec; }
/** * Converts a StreamSpec into a KafakStreamSpec. Special handling for coordinator and changelog stream. * @param spec a StreamSpec object * @return KafkaStreamSpec object */ public KafkaStreamSpec toKafkaSpec(StreamSpec spec) { KafkaStreamSpec kafkaSpec; if (spec.isChangeLogStream()) { String topicName = spec.getPhysicalName(); ChangelogInfo topicMeta = changelogTopicMetaInformation.get(topicName); if (topicMeta == null) { throw new StreamValidationException("Unable to find topic information for topic " + topicName); } kafkaSpec = new KafkaStreamSpec(spec.getId(), topicName, systemName, spec.getPartitionCount(), topicMeta.replicationFactor(), topicMeta.kafkaProps()); } else if (spec.isCoordinatorStream()) { kafkaSpec = new KafkaStreamSpec(spec.getId(), spec.getPhysicalName(), systemName, 1, coordinatorStreamReplicationFactor, coordinatorStreamProperties); } else if (intermediateStreamProperties.containsKey(spec.getId())) { kafkaSpec = KafkaStreamSpec.fromSpec(spec).copyWithProperties(intermediateStreamProperties.get(spec.getId())); } else { kafkaSpec = KafkaStreamSpec.fromSpec(spec); } return kafkaSpec; }
/** * Converts a StreamSpec into a KafakStreamSpec. Special handling for coordinator and changelog stream. * @param spec a StreamSpec object * @return KafkaStreamSpec object */ public KafkaStreamSpec toKafkaSpec(StreamSpec spec) { KafkaStreamSpec kafkaSpec; if (spec.isChangeLogStream()) { String topicName = spec.getPhysicalName(); ChangelogInfo topicMeta = changelogTopicMetaInformation.get(topicName); if (topicMeta == null) { throw new StreamValidationException("Unable to find topic information for topic " + topicName); } kafkaSpec = new KafkaStreamSpec(spec.getId(), topicName, systemName, spec.getPartitionCount(), topicMeta.replicationFactor(), topicMeta.kafkaProps()); } else if (spec.isCoordinatorStream()) { kafkaSpec = new KafkaStreamSpec(spec.getId(), spec.getPhysicalName(), systemName, 1, coordinatorStreamReplicationFactor, coordinatorStreamProperties); } else if (intermediateStreamProperties.containsKey(spec.getId())) { kafkaSpec = KafkaStreamSpec.fromSpec(spec).copyWithProperties(intermediateStreamProperties.get(spec.getId())); } else { kafkaSpec = KafkaStreamSpec.fromSpec(spec); } return kafkaSpec; }