@Override public void verifyConsistent( ImmutableClassesGiraphConfiguration conf) { Class<?>[] factoryTypes = ReflectionUtils.getTypeArguments( MessageValueFactory.class, messageValueFactoryClass); ReflectionUtils.verifyTypes(messageClass, factoryTypes[0], "Message factory", messageValueFactoryClass); if (messageCombinerClass != null) { Class<?>[] combinerTypes = ReflectionUtils.getTypeArguments( MessageCombiner.class, messageCombinerClass); ReflectionUtils.verifyTypes(conf.getVertexIdClass(), combinerTypes[0], "Vertex id", messageCombinerClass); ReflectionUtils.verifyTypes(messageClass, combinerTypes[1], "Outgoing message", messageCombinerClass); } }
void sanityTypeChecks( GiraphConfiguration conf, Class<?> previousMessageClass) { if (computationClass != null) { final Class<?> vertexIdClass = GiraphConstants.VERTEX_ID_CLASS.get(conf); final Class<?> vertexValueClass = GiraphConstants.VERTEX_VALUE_CLASS.get(conf); final Class<?> edgeValueClass = GiraphConstants.EDGE_VALUE_CLASS.get(conf); Class<?>[] classList = getTypeArguments( TypesHolder.class, computationClass); Preconditions.checkArgument(classList.length == 5); ReflectionUtils.verifyTypes( vertexIdClass, classList[0], "vertexId", computationClass); ReflectionUtils.verifyTypes( vertexValueClass, classList[1], "vertexValue", computationClass); ReflectionUtils.verifyTypes( edgeValueClass, classList[2], "edgeValue", computationClass); if (previousMessageClass != null) { ReflectionUtils.verifyTypes( previousMessageClass, classList[3], "recvMessage", computationClass); } ReflectionUtils.verifyTypes( messageClass, classList[4], "sendMessage", computationClass); } }
@Override public void apply(AbstractPiece piece) { if (!piece.getClass().equals(Piece.class)) { Class<?>[] classList = getTypeArguments( AbstractPiece.class, piece.getClass()); Preconditions.checkArgument(classList.length == 7); ReflectionUtils.verifyTypes( vertexIdClass, classList[0], "vertexId", piece.getClass()); ReflectionUtils.verifyTypes( vertexValueClass, classList[1], "vertexValue", piece.getClass()); ReflectionUtils.verifyTypes( edgeValueClass, classList[2], "edgeValue", piece.getClass()); MessageClasses classes = piece.getMessageClasses(conf); Class<?> messageType = classes.getMessageClass(); if (messageType == null) { messageType = NoMessage.class; } ReflectionUtils.verifyTypes( messageType, classList[3], "message", piece.getClass()); ReflectionUtils.verifyTypes( workerContextValueClass, classList[4], "workerContextValue", piece.getClass()); // No need to check worker context message class at all ReflectionUtils.verifyTypes( executionStageClass, classList[6], "executionStage", piece.getClass()); } } });
@Override public void verifyConsistent(ImmutableClassesGiraphConfiguration conf) { MessageValueFactory<M> messageValueFactory = messageValueFactorySupplier.apply(conf); Preconditions.checkState( messageValueFactory.newInstance().getClass().equals(messageClass)); if (messageCombinerSupplier != null) { MessageCombiner<? super I, M> messageCombiner = messageCombinerSupplier.apply(conf); Preconditions.checkState(messageCombiner.createInitialMessage() .getClass().equals(messageClass)); Class<?>[] combinerTypes = ReflectionUtils.getTypeArguments( MessageCombiner.class, messageCombiner.getClass()); ReflectionUtils.verifyTypes(conf.getVertexIdClass(), combinerTypes[0], "Vertex id", messageCombiner.getClass()); ReflectionUtils.verifyTypes(messageClass, combinerTypes[1], "Outgoing message", messageCombiner.getClass()); } } }
ReflectionUtils.verifyTypes(conf.getVertexIdClass(), computationTypes[0], "Vertex id", computationClass); ReflectionUtils.verifyTypes(conf.getVertexValueClass(), computationTypes[1], "Vertex value", computationClass); ReflectionUtils.verifyTypes(conf.getEdgeValueClass(), computationTypes[2], "Edge value", computationClass); ReflectionUtils.verifyTypes(incomingMessageClasses.getMessageClass(), computationTypes[3], "Incoming message type", computationClass); ReflectionUtils.verifyTypes(outgoingMessageClasses.getMessageClass(), computationTypes[4], "Outgoing message type", computationClass);