package edu.ucsb.jpregel.system;
import api.MasterGraphMaker;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.IOException;
import static java.lang.System.err;
import static java.lang.System.exit;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Makes a complete binary tree with N nodes. If N != 2^m -1, for some natural
* number m, then some leaves are missing. The shortest path from the root to a
* deepest leaf is log_2 N.
*
* It produces files that have 1 line of the form: N blockSize v where 0 <= v <
* N - 1 and blockSize = ceiling ( N / numWorkers )
*
* The worker reading the file creates vertices and out edges for vertices v, v
* + 1, v + 2, ..., v + blockSize - 1, with their edges.
*
* @author Pete Cappello
*/
public class MasterGraphMakerBinaryTree2 implements MasterGraphMaker
{
@Override
public void make(FileSystem fileSystem, int numWorkers)
{
BufferedReader bufferedReader = null;
try
{
bufferedReader = fileSystem.getFileInputStream();
} catch (FileNotFoundException ex)
{
err.println("input file not found");
exit(1);
}
String line = null;
try
{
if ((line = bufferedReader.readLine()) == null)
{
err.println("WorkerFileWriter1: Error: input file has no lines.");
exit(1);
}
} catch (IOException ex)
{
System.err.println("Error reading lines from file" + ex.getLocalizedMessage());
}
int numV = Integer.parseInt(line);
for (int fileNum = 1; fileNum <= numWorkers; fileNum++)
{
// open file for output in "in" directory
BufferedWriter bufferedWriter = fileSystem.getWorkerInputFileOutputStream(fileNum);
// output line: startVertexId stopVertexId
StringBuilder string = new StringBuilder();
string.append(numV).append(' ');
string.append(numWorkers);
try
{
bufferedWriter.write( new String( string ) );
bufferedWriter.newLine();
} catch (IOException ex)
{
System.err.println("Error writing line to file: " + ex.getLocalizedMessage());
}
try
{ // close worker input file
bufferedWriter.close();
} catch (IOException ex)
{
Logger.getLogger(MasterGraphMakerG1.class.getName()).log(Level.SEVERE, null, ex);
}
}
try
{
bufferedReader.close();
} catch (IOException ex)
{
System.err.println("Error closing bufferedReader: " + ex.getMessage());
}
}
}