Skip to content

Commit 8d15009

Browse files
committed
Added a command line option -db_write_dir to the provDB to set the write directory for the database shards
The write directory of the provDB shards can now be specified by changing provdb_writedir in chimbuko_config script run_services script now fails if it tries to use a variable that has not been set
1 parent ccd1d46 commit 8d15009

3 files changed

Lines changed: 19 additions & 8 deletions

File tree

app/provdb_admin.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,9 @@ struct ProvdbArgs{
8686
int nthreads;
8787
std::string db_type;
8888
unsigned long db_commit_freq;
89+
std::string db_write_dir;
8990

90-
ProvdbArgs(): engine("ofi+tcp"), autoshutdown(true), nshards(1), db_type("unqlite"), nthreads(1), db_commit_freq(10000){}
91+
ProvdbArgs(): engine("ofi+tcp"), autoshutdown(true), nshards(1), db_type("unqlite"), nthreads(1), db_commit_freq(10000), db_write_dir("."){}
9192
};
9293

9394

@@ -112,6 +113,7 @@ int main(int argc, char** argv) {
112113
addOptionalCommandLineArg(parser, nthreads, "Specify the number of RPC handler threads (default 1)");
113114
addOptionalCommandLineArg(parser, db_type, "Specify the Sonata database type (default \"unqlite\")");
114115
addOptionalCommandLineArg(parser, db_commit_freq, "Specify the frequency at which the database flushes to disk in ms (default 10000)");
116+
addOptionalCommandLineArg(parser, db_write_dir, "Specify the directory in which the database shards will be written (default \".\")");
115117

116118
if(argc-1 < parser.nMandatoryArgs() || (argc == 2 && std::string(argv[1]) == "-help")){
117119
parser.help(std::cout);
@@ -167,15 +169,15 @@ int main(int argc, char** argv) {
167169
sonata::Admin admin(engine);
168170
progressStream << "ProvDB Admin: creating global data database" << std::endl;
169171
std::string glob_db_name = "provdb.global";
170-
std::string glob_db_config = stringize("{ \"path\" : \"./%s.unqlite\" }", glob_db_name.c_str());
172+
std::string glob_db_config = stringize("{ \"path\" : \"%s/%s.unqlite\" }", args.db_write_dir.c_str(), glob_db_name.c_str());
171173
admin.createDatabase(addr, 0, glob_db_name, args.db_type, glob_db_config);
172174

173175
progressStream << "ProvDB Admin: creating " << args.nshards << " database shards" << std::endl;
174176

175177
std::vector<std::string> db_shard_names(args.nshards);
176178
for(int s=0;s<args.nshards;s++){
177179
std::string db_name = stringize("provdb.%d",s);
178-
std::string config = stringize("{ \"path\" : \"./%s.unqlite\" }", db_name.c_str());
180+
std::string config = stringize("{ \"path\" : \"%s/%s.unqlite\" }", args.db_write_dir.c_str(), db_name.c_str());
179181
progressStream << "ProvDB Admin: Shard " << s << ": " << db_name << " " << config << " " << args.db_type << std::endl;
180182
admin.createDatabase(addr, 0, db_name, args.db_type, config);
181183
db_shard_names[s] = db_name;

scripts/launch/chimbuko_config.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ provdb_nshards=4 #number of database shards
2727
provdb_engine="ofi+tcp;ofi_rxm" #the OFI libfabric provider used for the Mochi stack
2828
provdb_port=5000 #the port of the provenance database
2929
provdb_nthreads=4 #number of worker threads; should be >= the number of shards
30+
provdb_writedir=chimbuko/provdb #the directory in which the provenance database is written. Chimbuko creates chimbuko/provdb which can be used as a default
3031

3132
#With "verbs" provider (used for infiniband, iWarp, etc) we need to also specify the domain, which can be found by running fi_info (on a compute node)
3233
provdb_domain=mlx5_0 #only needed for verbs provider <------------ ***SET ME (if using verbs)***

scripts/launch/run_services.sh

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#!/bin/bash
22

33
set -e
4+
set -u
45
set -o pipefail
56

67
#---------------------------------------------------------------------------
@@ -46,7 +47,7 @@ fi
4647

4748
mkdir chimbuko
4849
mkdir chimbuko/logs
49-
mkdir chimbuko/provdb
50+
mkdir chimbuko/provdb #directory in which provDB is run. Also the default directory for the database shards
5051
mkdir chimbuko/viz
5152
mkdir chimbuko/vars #directory for files containing variables for inter-script communication
5253
mkdir chimbuko/adios2
@@ -93,15 +94,21 @@ if (( 1 )); then
9394
echo "==========================================="
9495
echo "Instantiating provenance database"
9596
echo "==========================================="
97+
98+
#If provdb_writedir is a relative path it should be relative to the run directory
99+
#Turn it into an absolute path before entering the subdirectory
100+
provdb_writedir=$(readlink -f ${provdb_writedir})
101+
96102
cd ${provdb_dir}
97-
rm -f provdb.*.unqlite* provider.address
103+
104+
rm -f ${provdb_writedir}/provdb.*.unqlite* provider.address
98105

99106
provdb_addr="${service_node_iface}:${provdb_port}" #can be IP:PORT or ADAPTOR:PORT per libfabric conventions
100107
if [[ ${provdb_engine} == "verbs" ]]; then
101108
provdb_addr="${provdb_domain}/${provdb_addr}"
102109
fi
103110

104-
provdb_admin "${provdb_addr}" ${provdb_extra_args} -engine ${provdb_engine} -nshards ${provdb_nshards} -nthreads ${provdb_nthreads} 2>&1 | tee ${log_dir}/provdb.log &
111+
provdb_admin "${provdb_addr}" ${provdb_extra_args} -engine ${provdb_engine} -nshards ${provdb_nshards} -nthreads ${provdb_nthreads} -db_write_dir ${provdb_writedir} 2>&1 | tee ${log_dir}/provdb.log &
105112
provdb_pid=$!
106113

107114
start_time=$SECONDS
@@ -134,7 +141,7 @@ if (( ${use_viz} )); then
134141
export ANOMALY_STATS_URL="sqlite:///${viz_dir}/anomaly_stats.sqlite"
135142
export ANOMALY_DATA_URL="sqlite:///${viz_dir}/anomaly_data.sqlite"
136143
export FUNC_STATS_URL="sqlite:///${viz_dir}/func_stats.sqlite"
137-
export PROVENANCE_DB=${provdb_dir}
144+
export PROVENANCE_DB=${provdb_writedir}
138145
export CELERY_BROKER_URL="redis://${HOST}:${viz_worker_port}"
139146

140147
#Setup redis
@@ -181,12 +188,13 @@ if (( ${use_viz} )); then
181188
fi
182189

183190
if (( 1 )); then
191+
pserver_addr="tcp://${ip}:${pserver_port}" #address for parameter server in format "tcp://IP:PORT"
192+
184193
echo "==========================================="
185194
echo "Chimbuko Services: Instantiating pserver"
186195
echo "==========================================="
187196
echo "Chimbuko Services: Pserver $pserver_addr"
188197

189-
pserver_addr="tcp://${ip}:${pserver_port}" #address for parameter server in format "tcp://IP:PORT"
190198
pserver -nt ${pserver_nt} -logdir ${log_dir} -port ${pserver_port} ${ps_extra_args} 2>&1 | tee ${log_dir}/pserver.log &
191199

192200
ps_pid=$!

0 commit comments

Comments
 (0)