33 #ifndef GRAPHCHI_FILENAMES_DEF
34 #define GRAPHCHI_FILENAMES_DEF
47 #define VARIABLE_IS_NOT_USED __attribute__ ((unused))
49 #define VARIABLE_IS_NOT_USED
55 template <
typename VertexDataType>
56 static std::string filename_vertex_data(std::string basefilename) {
63 static std::string filename_degree_data(std::string basefilename) {
64 return basefilename +
"_degs.bin";
67 static std::string filename_intervals(std::string basefilename,
int nshards) {
70 ss <<
"." << nshards <<
".intervals";
75 static std::string VARIABLE_IS_NOT_USED get_part_str(
int p,
int nshards) {
77 sprintf(partstr,
".%d_%d", p, nshards);
78 return std::string(partstr);
81 template <
typename EdgeDataType>
82 static std::string filename_shard_edata(std::string basefilename,
int p,
int nshards) {
86 ss <<
"e" <<
sizeof(EdgeDataType) <<
"B.";
87 ss << p <<
"_" << nshards;
91 static std::string filename_shard_adj(std::string basefilename,
int p,
int nshards) {
95 ss << p <<
"_" << nshards <<
".adj";
102 static std::string filename_config();
103 static std::string filename_config() {
104 char * chi_root = getenv(
"GRAPHCHI_ROOT");
105 if (chi_root != NULL) {
106 return std::string(chi_root) +
"/conf/graphchi.cnf";
108 return "conf/graphchi.cnf";
112 bool shard_file_exists(std::string sname);
113 bool shard_file_exists(std::string sname) {
114 int tryf = open(sname.c_str(), O_RDONLY);
127 template<
typename EdgeDataType>
128 static int find_shards(std::string base_filename, std::string shard_string=
"auto") {
131 int last_shard_num = 2400;
132 if (shard_string ==
"auto") {
135 start_num = atoi(shard_string.c_str());
139 last_shard_num = start_num;
142 for(try_shard_num=start_num; try_shard_num <= last_shard_num; try_shard_num++) {
143 std::string last_shard_name = filename_shard_edata<EdgeDataType>(base_filename, try_shard_num - 1, try_shard_num);
145 int tryf = open(last_shard_name.c_str(), O_RDONLY);
150 int nshards_candidate = try_shard_num;
154 for(
int p=0; p < nshards_candidate; p++) {
155 std::string sname = filename_shard_edata<EdgeDataType>(base_filename, p, nshards_candidate);
156 if (!shard_file_exists(sname)) {
157 logstream(
LOG_DEBUG) <<
"Missing shard file: " << sname << std::endl;
162 sname = filename_shard_adj(base_filename, p, nshards_candidate);
163 if (!shard_file_exists(sname)) {
164 logstream(
LOG_DEBUG) <<
"Missing shard file: " << sname << std::endl;
171 std::string degreefname = filename_degree_data(base_filename);
172 if (!shard_file_exists(degreefname)) {
173 logstream(
LOG_ERROR) <<
"Missing degree file: " << degreefname << std::endl;
174 logstream(
LOG_ERROR) <<
"You need to preprocess (sharder) your file again!" << std::endl;
178 std::string intervalfname = filename_intervals(base_filename, nshards_candidate);
179 if (!shard_file_exists(intervalfname)) {
180 logstream(
LOG_ERROR) <<
"Missing intervals file: " << intervalfname << std::endl;
181 logstream(
LOG_ERROR) <<
"You need to preprocess (sharder) your file again!" << std::endl;
189 logstream(
LOG_INFO) <<
"Detected number of shards: " << nshards_candidate << std::endl;
190 logstream(
LOG_INFO) <<
"To specify a different number of shards, use command-line parameter 'nshards'" << std::endl;
191 return nshards_candidate;
194 if (last_shard_num == start_num) {
195 logstream(
LOG_ERROR) <<
"Could not find shards with nshards = " << start_num << std::endl;
196 logstream(
LOG_ERROR) <<
"Please define 'nshards 0' or 'nshards auto' to automatically detect." << std::endl;