private void validateConfiguration(GiraphConfiguration configuration) { // Perform Giraph's validation code GiraphConfigurationValidator<?, ?, ?, ?, ?> gtv = new GiraphConfigurationValidator(configuration); gtv.validateConfiguration(); // TODO: Do our own validation }
/** Verify matching generic types in VertexInputFormat. */ private void verifyVertexInputFormatGenericTypes() { Class<? extends VertexInputFormat<I, V, E>> vertexInputFormatClass = conf.getVertexInputFormatClass(); if (vertexInputFormatClass != null) { Class<?>[] classList = getTypeArguments(VertexInputFormat.class, vertexInputFormatClass); checkAssignable(classList, ID_PARAM_INDEX, vertexIndexType(), VertexInputFormat.class, "vertex index"); checkAssignable(classList, VALUE_PARAM_INDEX, vertexValueType(), VertexInputFormat.class, "vertex value"); checkAssignable(classList, EDGE_PARAM_INDEX, edgeValueType(), VertexInputFormat.class, "edge value"); } }
/** * Make sure that all registered classes have matching types. This * is a little tricky due to type erasure, cannot simply get them from * the class type arguments. Also, set the vertex index, vertex value, * edge value and message value classes. */ public void validateConfiguration() { checkConfiguration(); verifyOutEdgesGenericTypes(); verifyVertexInputFormatGenericTypes(); verifyEdgeInputFormatGenericTypes(); verifyVertexOutputFormatGenericTypes(); verifyEdgeOutputFormatGenericTypes(); verifyVertexResolverGenericTypes(); verifyVertexValueCombinerGenericTypes(); verifyMessageCombinerGenericTypes(); verifyVertexValueFactoryGenericTypes(); }
/** * Verify matching generic types for a specific OutEdges class. * * @param outEdgesClass {@link org.apache.giraph.edge.OutEdges} class to check */ private void verifyOutEdgesGenericTypesClass( Class<? extends OutEdges<I, E>> outEdgesClass) { Class<?>[] classList = getTypeArguments(OutEdges.class, outEdgesClass); checkAssignable(classList, ID_PARAM_INDEX, vertexIndexType(), OutEdges.class, "vertex index"); checkAssignable(classList, EDGE_PARAM_OUT_EDGES_INDEX, edgeValueType(), OutEdges.class, "edge value"); }
/** * If there is a vertex resolver, * validate the generic parameter types. * */ private void verifyVertexResolverGenericTypes() { Class<? extends VertexResolver<I, V, E>> vrClass = conf.getVertexResolverClass(); if (DefaultVertexResolver.class.equals(vrClass)) { return; } Class<?>[] classList = getTypeArguments(VertexResolver.class, vrClass); checkEquals(classList, ID_PARAM_INDEX, vertexIndexType(), VertexResolver.class, "vertex index"); checkEquals(classList, VALUE_PARAM_INDEX, vertexValueType(), VertexResolver.class, "vertex value"); checkEquals(classList, EDGE_PARAM_INDEX, edgeValueType(), VertexResolver.class, "edge value"); }
/** * If there is a message combiner type, verify its * generic params match the job. */ private void verifyMessageCombinerGenericTypes() { MessageCombiner<I, M2> messageCombiner = conf.createOutgoingMessageCombiner(); if (messageCombiner != null) { Class<?>[] classList = getTypeArguments(MessageCombiner.class, messageCombiner.getClass()); checkEquals(classList, ID_PARAM_INDEX, vertexIndexType(), MessageCombiner.class, "vertex index"); checkEquals(classList, MSG_COMBINER_PARAM_INDEX, outgoingMessageValueType(), MessageCombiner.class, "message value"); } }
/** Verify that the vertex value factory's type matches the job */ private void verifyVertexValueFactoryGenericTypes() { Class<? extends VertexValueFactory<V>> vvfClass = conf.getVertexValueFactoryClass(); if (DefaultVertexValueFactory.class.equals(vvfClass)) { return; } Class<?>[] classList = getTypeArguments(VertexValueFactory.class, vvfClass); checkEquals(classList, VALUE_PARAM_VERTEX_VALUE_FACTORY_INDEX, vertexValueType(), VertexValueFactory.class, "vertex value"); }
/** * If there is a vertex value combiner type, verify its * generic params match the job. */ private void verifyVertexValueCombinerGenericTypes() { Class<? extends VertexValueCombiner<V>> vertexValueCombiner = conf.getVertexValueCombinerClass(); if (vertexValueCombiner != null) { Class<?>[] classList = getTypeArguments(VertexValueCombiner.class, vertexValueCombiner); checkAssignable(classList, VALUE_PARAM_VERTEX_VALUE_COMBINER_INDEX, vertexValueType(), VertexValueCombiner.class, "vertex value"); } }
/** Verify matching generic types in EdgeInputFormat. */ private void verifyEdgeInputFormatGenericTypes() { Class<? extends EdgeInputFormat<I, E>> edgeInputFormatClass = conf.getEdgeInputFormatClass(); if (edgeInputFormatClass != null) { Class<?>[] classList = getTypeArguments(EdgeInputFormat.class, edgeInputFormatClass); checkAssignable(classList, ID_PARAM_INDEX, vertexIndexType(), EdgeInputFormat.class, "vertex index"); checkAssignable(classList, EDGE_PARAM_EDGE_INPUT_FORMAT_INDEX, edgeValueType(), EdgeInputFormat.class, "edge value"); } }
/** Verify that the edge output format's generic params match the job. */ private void verifyEdgeOutputFormatGenericTypes() { Class<? extends VertexOutputFormat<I, V, E>> vertexOutputFormatClass = conf.getVertexOutputFormatClass(); if (conf.hasVertexOutputFormat()) { Class<?>[] classList = getTypeArguments(VertexOutputFormat.class, vertexOutputFormatClass); checkAssignable(classList, ID_PARAM_INDEX, vertexIndexType(), VertexOutputFormat.class, "vertex index"); checkAssignable(classList, VALUE_PARAM_INDEX, vertexValueType(), VertexOutputFormat.class, "vertex value"); checkAssignable(classList, EDGE_PARAM_INDEX, edgeValueType(), VertexOutputFormat.class, "edge value"); } }
new GiraphConfigurationValidator(giraphConf); gtv.validateConfiguration();
/** Verify that the vertex output format's generic params match the job. */ private void verifyVertexOutputFormatGenericTypes() { Class<? extends EdgeOutputFormat<I, V, E>> edgeOutputFormatClass = conf.getEdgeOutputFormatClass(); if (conf.hasEdgeOutputFormat()) { Class<?>[] classList = getTypeArguments(EdgeOutputFormat.class, edgeOutputFormatClass); checkAssignable(classList, ID_PARAM_INDEX, vertexIndexType(), VertexOutputFormat.class, "vertex index"); checkAssignable(classList, VALUE_PARAM_INDEX, vertexValueType(), VertexOutputFormat.class, "vertex value"); checkAssignable(classList, EDGE_PARAM_INDEX, edgeValueType(), VertexOutputFormat.class, "edge value"); } }