/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.giraph.debugger.utils;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.giraph.conf.GiraphConfiguration;
import org.apache.giraph.conf.ImmutableClassesGiraphConfiguration;
import org.apache.giraph.debugger.GiraphAggregator.AggregatedValue;
import org.apache.giraph.debugger.Scenario.CommonVertexMasterContext;
import com.google.protobuf.GeneratedMessage;
/**
* Wrapper class around
* {@link org.apache.giraph.debugger.Scenario.CommonVertexMasterContext}
* protocol buffer.
*/
@SuppressWarnings("rawtypes")
public class CommonVertexMasterContextWrapper extends BaseWrapper {
/**
* Wraps the {@link ImmutableClassesGiraphConfiguration} which
* {@link org.apache.giraph.debugger.Scenario.CommonVertexMasterContext}
* exposes.
*/
private ImmutableClassesGiraphConfiguration immutableClassesConfig = null;
/**
* Wraps the superstep number which
* {@link org.apache.giraph.debugger.Scenario.CommonVertexMasterContext}
* exposes.
*/
private long superstepNo;
/**
* Wraps the totalNumVertices which
* {@link org.apache.giraph.debugger.Scenario.CommonVertexMasterContext}
* exposes.
*/
private long totalNumVertices;
/**
* Wraps the totalNumEdges which
* {@link org.apache.giraph.debugger.Scenario.CommonVertexMasterContext}
* exposes.
*/
private long totalNumEdges;
/**
* Wraps the aggregated values from the previous superstep which
* {@link org.apache.giraph.debugger.Scenario.CommonVertexMasterContext}
* exposes.
*/
private List<AggregatedValueWrapper> previousAggregatedValueWrappers;
/**
* Default constructor. Initializes superstepNo, totalNumVertices, and
* totalNumEdges to -1. Initializes an empty aggregated values.
*/
public CommonVertexMasterContextWrapper() {
this.superstepNo = -1;
this.totalNumVertices = -1;
this.totalNumEdges = -1;
this.previousAggregatedValueWrappers = new ArrayList<>();
}
/**
* Constructor with immutableClassesConfig, superstepNo, totalNumVertices,
* and totalNumEdges. Does not initialize previousAggregatedValueWrappers.
* @param immutableClassesConfig the
* {@link ImmutableClassesGiraphConfiguration} to initialize.
* @param superstepNo superstep number to initialize.
* @param totalNumVertices total number of vertices number to initialize.
* @param totalNumEdges total number of edges to initialize.
*/
public CommonVertexMasterContextWrapper(
ImmutableClassesGiraphConfiguration immutableClassesConfig,
long superstepNo, long totalNumVertices, long totalNumEdges) {
this.immutableClassesConfig = immutableClassesConfig;
this.superstepNo = superstepNo;
this.totalNumVertices = totalNumVertices;
this.totalNumEdges = totalNumEdges;
}
public long getSuperstepNoWrapper() {
return superstepNo;
}
public long getTotalNumVerticesWrapper() {
return totalNumVertices;
}
public long getTotalNumEdgesWrapper() {
return totalNumEdges;
}
public void setSuperstepNoWrapper(long superstepNo) {
this.superstepNo = superstepNo;
}
public void setTotalNumVerticesWrapper(long totalNumVertices) {
this.totalNumVertices = totalNumVertices;
}
public void setTotalNumEdgesWrapper(long totalNumEdges) {
this.totalNumEdges = totalNumEdges;
}
/**
* Adds an aggregated value from the previous superstep.
* @param previousAggregatedValueWrapper an {@link AggregatedValueWrapper}
* object wrapping the aggregated value.
*/
public void addPreviousAggregatedValue(
AggregatedValueWrapper previousAggregatedValueWrapper) {
this.previousAggregatedValueWrappers.add(previousAggregatedValueWrapper);
}
public void setPreviousAggregatedValues(
List<AggregatedValueWrapper> previousAggregatedValueWrappers) {
this.previousAggregatedValueWrappers = previousAggregatedValueWrappers;
}
public Collection<AggregatedValueWrapper> getPreviousAggregatedValues() {
return previousAggregatedValueWrappers;
}
public ImmutableClassesGiraphConfiguration getConfig() {
return immutableClassesConfig;
}
public void setConfig(
ImmutableClassesGiraphConfiguration immutableClassesConfig) {
this.immutableClassesConfig = immutableClassesConfig;
}
@Override
public GeneratedMessage buildProtoObject() {
CommonVertexMasterContext.Builder commonContextBuilder =
CommonVertexMasterContext.newBuilder();
commonContextBuilder.setConf(toByteString(immutableClassesConfig))
.setSuperstepNo(getSuperstepNoWrapper())
.setTotalNumVertices(getTotalNumVerticesWrapper())
.setTotalNumEdges(getTotalNumEdgesWrapper());
for (AggregatedValueWrapper aggregatedValueWrapper :
getPreviousAggregatedValues()) {
commonContextBuilder
.addPreviousAggregatedValue((AggregatedValue) aggregatedValueWrapper
.buildProtoObject());
}
return commonContextBuilder.build();
}
@Override
public void loadFromProto(GeneratedMessage generatedMessage)
throws ClassNotFoundException, IOException, InstantiationException,
IllegalAccessException {
CommonVertexMasterContext commonContext = (CommonVertexMasterContext)
generatedMessage;
GiraphConfiguration config = new GiraphConfiguration();
fromByteString(commonContext.getConf(), config);
ImmutableClassesGiraphConfiguration immutableClassesGiraphConfiguration =
new ImmutableClassesGiraphConfiguration(config);
setConfig(immutableClassesGiraphConfiguration);
setSuperstepNoWrapper(commonContext.getSuperstepNo());
setTotalNumVerticesWrapper(commonContext.getTotalNumVertices());
setTotalNumEdgesWrapper(commonContext.getTotalNumEdges());
for (AggregatedValue previousAggregatedValueProto : commonContext
.getPreviousAggregatedValueList()) {
AggregatedValueWrapper aggregatedValueWrapper =
new AggregatedValueWrapper();
aggregatedValueWrapper.loadFromProto(previousAggregatedValueProto);
addPreviousAggregatedValue(aggregatedValueWrapper);
}
}
@Override
public GeneratedMessage parseProtoFromInputStream(InputStream inputStream)
throws IOException {
return CommonVertexMasterContext.parseFrom(inputStream);
}
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("\nconfig: " + immutableClassesConfig.toString());
stringBuilder.append("superstepNo: " + getSuperstepNoWrapper());
stringBuilder.append("\ntotalNumVertices: " + totalNumVertices);
stringBuilder.append("\ntotalNumEdges: " + totalNumEdges);
stringBuilder.append("\nnumAggregators: " +
getPreviousAggregatedValues().size());
for (AggregatedValueWrapper aggregatedValueWrapper :
getPreviousAggregatedValues()) {
stringBuilder.append("\n" + aggregatedValueWrapper);
}
return stringBuilder.toString();
}
}