/** * Set incoming message class * @param incomingMessageClass incoming message class */ @Deprecated public void setIncomingMessageClass( Class<? extends Writable> incomingMessageClass) { if (!incomingMessageClasses.getMessageClass(). equals(incomingMessageClass)) { throw new IllegalArgumentException( "Cannot change incoming message class from " + incomingMessageClasses.getMessageClass() + " previously, to " + incomingMessageClass); } }
/** * Get the user's subclassed incoming message value class. * * @param <M> Message data * @return User's vertex message value class */ public <M extends Writable> Class<M> getIncomingMessageValueClass() { return classes.getIncomingMessageClasses().getMessageClass(); }
/** * Get the user's subclassed outgoing message value class. * * @param <M> Message type * @return User's vertex message value class */ public <M extends Writable> Class<M> getOutgoingMessageValueClass() { return classes.getOutgoingMessageClasses().getMessageClass(); }
@Override public MessageClasses<I, M> getMessageClasses( ImmutableClassesGiraphConfiguration conf) { MessageClasses<I, M> messageClasses = null; MessageClasses<I, M> firstMessageClasses = null; for (AbstractPiece<I, V, E, M, WV, WM, S> innerPiece : innerPieces) { MessageClasses<I, M> cur = innerPiece.getMessageClasses(conf); Preconditions.checkState(cur != null); if (!cur.getMessageClass().equals(NoMessage.class)) { if (messageClasses != null) { throw new RuntimeException( "Only one piece combined through delegate (" + toString() + ") can send messages"); } messageClasses = cur; } if (firstMessageClasses == null) { firstMessageClasses = cur; } } return messageClasses != null ? messageClasses : firstMessageClasses; }
@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 MessageStore<I, M> newStore( MessageClasses<I, M> messageClasses) { Class<M> messageClass = messageClasses.getMessageClass(); MessageValueFactory<M> messageValueFactory = messageClasses.createMessageValueFactory(conf);
ReflectionUtils.verifyTypes(incomingMessageClasses.getMessageClass(), computationTypes[3], "Incoming message type", computationClass); ReflectionUtils.verifyTypes(outgoingMessageClasses.getMessageClass(), computationTypes[4], "Outgoing message type", computationClass);