Skip to content

Commit

Permalink
Save/load configuration to SQLite DB (#336)
Browse files Browse the repository at this point in the history
* Save/load parameter to SQLite

* updated code indentation and comment

Co-authored-by: Your Name <you@example.com>
  • Loading branch information
Jiang-Hua and Your Name committed Apr 12, 2022
1 parent 79285fc commit ebc5143
Show file tree
Hide file tree
Showing 14 changed files with 363 additions and 19 deletions.
3 changes: 3 additions & 0 deletions config/generic.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
<scaletheme>auto</scaletheme>
<pixelsperpoint>auto</pixelsperpoint>
</theme>
<sqlitedb>
<sqlitedb_dir>TMP</sqlitedb_dir>
</sqlitedb>
<code_highlight>
<highlight>true</highlight>
</code_highlight>
Expand Down
6 changes: 6 additions & 0 deletions src/db2/db2opt.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ proc countdb2opts { bm } {
if { $bm eq "TPC-C" } {
ttk::button $Name -command {
copyfieldstoconfig configdb2 [ subst $db2optsfields ] tpcc
Dict2SQLite "db2" $configdb2
unset db2optsfields
if { ($interval >= 60) || ($interval <= 0) } { tk_messageBox -message "Refresh rate must be more than 0 secs and less than 60 secs"
dict set genericdict transaction_counter tc_refresh_rate 10
Expand All @@ -138,6 +139,7 @@ proc countdb2opts { bm } {
} else {
ttk::button $Name -command {
copyfieldstoconfig configdb2 [ subst $db2optsfields ] tpch
Dict2SQLite "db2" $configdb2
unset db2optsfields
if { ($interval >= 60) || ($interval <= 0) } { tk_messageBox -message "Refresh rate must be more than 0 secs and less than 60 secs"
dict set genericdict transaction_counter tc_refresh_rate 10
Expand Down Expand Up @@ -492,6 +494,7 @@ proc configdb2tpcc {option} {
if {$db2_monreport >= $db2_duration} { set db2_monreport 0 }
ttk::button $Name -command {
copyfieldstoconfig configdb2 [ subst $db2fields ] tpcc
Dict2SQLite "db2" $configdb2
unset db2fields
destroy .tpc
loadtpcc
Expand All @@ -502,6 +505,7 @@ proc configdb2tpcc {option} {
set db2_count_ware [ verify_warehouse $db2_count_ware 100000 ]
set db2_num_vu [ verify_build_threads $db2_num_vu $db2_count_ware 1024 ]
copyfieldstoconfig configdb2 [ subst $db2fields ] tpcc
Dict2SQLite "db2" $configdb2
unset db2fields
destroy .tpc
} -text {OK}
Expand Down Expand Up @@ -723,6 +727,7 @@ proc configdb2tpch {option} {
"drive" {
ttk::button $Name -command {
copyfieldstoconfig configdb2 [ subst $db2fields ] tpch
Dict2SQLite "db2" $configdb2
unset db2fields
destroy .db2tpch
loadtpch
Expand All @@ -732,6 +737,7 @@ proc configdb2tpch {option} {
ttk::button $Name -command {
set db2_num_tpch_threads [ verify_build_threads $db2_num_tpch_threads 512 512 ]
copyfieldstoconfig configdb2 [ subst $db2fields ] tpch
Dict2SQLite "db2" $configdb2
unset db2fields
destroy .db2tpch
} -text {OK}
Expand Down
18 changes: 18 additions & 0 deletions src/generic/gencli.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -529,6 +529,8 @@ proc diset { args } {
putscli "Failed to set Dictionary value: $message"
} else {
putscli "Changed $dct:$key2 from $previous to [ concat $val ] for $rdbms"
#Save new value to SQLite
SQLiteUpdateKeyValue $key $dct $key2 $val
remote_command [ concat diset $dct $key2 [ list \{$val\} ]]
}}
} else {
Expand Down Expand Up @@ -603,6 +605,7 @@ proc dbset { args } {
set rdbms [ lindex $dbl $ind ]
remote_command [ concat dbset db $val ]
putscli "Database set to $rdbms"
SQLiteUpdateKeyValue "generic" "benchmark" "rdbms" $rdbms
}
}
bm {
Expand All @@ -623,6 +626,7 @@ proc dbset { args } {
set bm $dicttoup
remote_command [ concat dbset bm $dicttoup ]
putscli "Benchmark set to $toup for $rdbms"
SQLiteUpdateKeyValue "generic" "benchmark" "bm" $bm
}
} else {
putscli "Unknown benchmark $toup, choose one from $posswkl2 (or compatible names $posswkl)"
Expand Down Expand Up @@ -827,6 +831,17 @@ proc loadscript {} {
putscli "Error:script failed to load"
}
remote_command [ concat loadscript ]
#Save dict(all config) to SQLite, if need group saving, uncomment
#upvar #0 dbdict dbdict
#foreach { key } [ dict keys $dbdict ] {
# if { [ dict get $dbdict $key name ] eq $rdbms } {
# set dbname $key
# set dictname config$key
# upvar #0 $dictname $dictname
# break
# }
#}
#Dict2SQLite $dbname [ dict get [ set $dictname ] ]
}

proc clearscript {} {
Expand Down Expand Up @@ -918,6 +933,7 @@ proc buildschema {} {
foreach { key } [ dict keys $dbdict ] {
if { [ dict get $dbdict $key name ] eq $rdbms } {
set dictname config$key
#set dbname $key
upvar #0 $dictname $dictname
break
}
Expand Down Expand Up @@ -981,6 +997,8 @@ proc buildschema {} {
puts "Error: $message"
}
}
#Save dict(all config) to SQLite, if need group saving, uncomment
#Dict2SQLite $dbname [ dict get [ set $dictname ] ]
}

proc vurun {} {
Expand Down
12 changes: 12 additions & 0 deletions src/generic/gened.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -3034,6 +3034,18 @@ proc select_rdbms { preselect } {
tk_messageBox -title "Confirm Benchmark" -message "[ regsub -all {(TP)(C)(-[CH])} $bm {\1RO\2\3} ] for $rdbms"
remote_command [ concat vuser_bench_ops $rdbms $bm ]
remote_command disable_bm_menu

#Change the default database
#If only submit rdbms&bm to SQLite, uncomment the following
#SQLiteUpdateKeyValue "generic" "benchmark" "rdbms" $rdbms
#SQLiteUpdateKeyValue "generic" "benchmark" "bm" $bm
dict set genericdict "benchmark" "rdbms" $rdbms
dict set genericdict "benchmark" "bm" $bm
Dict2SQLite "generic" $genericdict

#Change the order of databases in dbdict. If need, uncomment
#set dbdict [ SetKeyAsFirst $dbdict [ string tolower $rdbms ] ]
#Dict2SQLite "database" $dbdict
}
} -text OK
grid $Parent.f1.ok -column 2 -row 8 -padx 3 -pady 3 -sticky e
Expand Down
52 changes: 45 additions & 7 deletions src/generic/geninit.tcl
Original file line number Diff line number Diff line change
@@ -1,23 +1,61 @@
#Load database config
set dbdict [ ::XML::To_Dict config/database.xml ]
#Change TPROC-x terminology to working TPC-x
set dbdict [ regsub -all {(TP)(RO)(C-[CH])} $dbdict {\1\3} ]
package require sqlite3

#Get generic config data
set genericdict [ ::XML::To_Dict config/generic.xml ]

#Get global variable sqlitedb_dir from generic.xml
if { [ dict exists $genericdict sqlitedb sqlitedb_dir ] } {
set sqlitedb_dir [ dict get $genericdict sqlitedb sqlitedb_dir ]
} else {
set sqlitedb_dir ""
}

#Load database config from SQLite database.db
set dbdict [ SQLite2Dict "database" ]

if { $dbdict eq "" } {
#Load database config from database.xml
set dbdict [ ::XML::To_Dict config/database.xml ]

#Change TPROC-x terminology to working TPC-x
set dbdict [ regsub -all {(TP)(RO)(C-[CH])} $dbdict {\1\3} ]

#Save XML content to SQLite - database.db
Dict2SQLite "database" $dbdict
}

#Start the GUI using database config
ed_start_gui $dbdict $icons $iconalt
wm positionfrom .
raise .ed_mainFrame

#Load database details in dict named configdbname
foreach { key } [ dict keys $dbdict ] {
set dictname config$key
set $dictname [ ::XML::To_Dict config/$key.xml ]
set dbconfdict [ SQLite2Dict $key ]
if { $dbconfdict eq "" } {
set dbconfdict [ ::XML::To_Dict config/$key.xml ]
Dict2SQLite $key $dbconfdict
}
set $dictname $dbconfdict
set prefix [ dict get $dbdict $key prefix ]
lappend dbsrclist "$key/$prefix\opt.tcl" "$key/$prefix\oltp.tcl" "$key/$prefix\olap.tcl" "$key/$prefix\otc.tcl" "$key/$prefix\met.tcl"
}

#Get generic config data
set genericdict [ ::XML::To_Dict config/generic.xml ]
get_xml_data
set genericdictdb [ SQLite2Dict "generic" ]
if { $genericdictdb eq "" } {
Dict2SQLite "generic" $genericdict
} else {
set genericdict $genericdictdb
}

#get_xml_data
set_globle_config $genericdict

#Make generics global
tsv::set application genericdict $genericdict
#Complete GUI using database config
disable_bm_menu
guid_init

49 changes: 43 additions & 6 deletions src/generic/geninitcli.tcl
Original file line number Diff line number Diff line change
@@ -1,16 +1,53 @@
#Load database config
set dbdict [ ::XML::To_Dict config/database.xml ]
set dbdict [ regsub -all {(TP)(RO)(C-[CH])} $dbdict {\1\3} ]
package require sqlite3

#Get generic config data
set genericdict [ ::XML::To_Dict config/generic.xml ]

#Get global variable sqlitedb_dir from generic.xml
if { [ dict exists $genericdict sqlitedb sqlitedb_dir ] } {
set sqlitedb_dir [ dict get $genericdict sqlitedb sqlitedb_dir ]
} else {
set sqlitedb_dir ""
}

#Load database config from SQLite database.db
set dbdict [ SQLite2Dict "database" ]
if { $dbdict eq "" } {
#Load database config from database.xml
set dbdict [ ::XML::To_Dict config/database.xml ]

#Change TPROC-x terminology to working TPC-x
set dbdict [ regsub -all {(TP)(RO)(C-[CH])} $dbdict {\1\3} ]

#Save XML content to SQLite - database.db
Dict2SQLite "database" $dbdict
}

#Load database details in dict named configdbname
foreach { key } [ dict keys $dbdict ] {
set dictname config$key
set $dictname [ ::XML::To_Dict config/$key.xml ]
set dbconfdict [ SQLite2Dict $key ]
if { $dbconfdict eq "" } {
set dbconfdict [ ::XML::To_Dict config/$key.xml ]
Dict2SQLite $key $dbconfdict
}
set $dictname $dbconfdict
set prefix [ dict get $dbdict $key prefix ]
lappend dbsrclist "$key/$prefix\opt.tcl" "$key/$prefix\oltp.tcl" "$key/$prefix\olap.tcl" "$key/$prefix\otc.tcl"
}

#Get generic config data
set genericdict [ ::XML::To_Dict config/generic.xml ]
get_xml_data
set genericdictdb [ SQLite2Dict "generic" ]
if { $genericdictdb eq "" } {
Dict2SQLite "generic" $genericdict
} else {
set genericdict $genericdictdb
}

#get_xml_data
set_globle_config $genericdict

#Make generics global
tsv::set application genericdict $genericdict
guid_init

47 changes: 41 additions & 6 deletions src/generic/geninitws.tcl
Original file line number Diff line number Diff line change
@@ -1,16 +1,51 @@
#Load database config
set dbdict [ ::XML::To_Dict config/database.xml ]
set dbdict [ regsub -all {(TP)(RO)(C-[CH])} $dbdict {\1\3} ]
package require sqlite3

#Get generic config data
set genericdict [ ::XML::To_Dict config/generic.xml ]

#Get global variable sqlitedb_dir from generic.xml
if { [ dict exists $genericdict sqlitedb sqlitedb_dir ] } {
set sqlitedb_dir [ dict get $genericdict sqlitedb sqlitedb_dir ]
} else {
set sqlitedb_dir ""
}

#Load database config from SQLite database.db
set dbdict [ SQLite2Dict "database" ]
if { $dbdict eq "" } {
#Load database config from database.xml
set dbdict [ ::XML::To_Dict config/database.xml ]

#Change TPROC-x terminology to working TPC-x
set dbdict [ regsub -all {(TP)(RO)(C-[CH])} $dbdict {\1\3} ]

#Save XML content to SQLite - database.db
Dict2SQLite "database" $dbdict
}

#Load database details in dict named configdbname
foreach { key } [ dict keys $dbdict ] {
set dictname config$key
set $dictname [ ::XML::To_Dict config/$key.xml ]
set dbconfdict [ SQLite2Dict $key ]
if { $dbconfdict eq "" } {
set dbconfdict [ ::XML::To_Dict config/$key.xml ]
Dict2SQLite $key $dbconfdict
}
set $dictname $dbconfdict
set prefix [ dict get $dbdict $key prefix ]
lappend dbsrclist "$key/$prefix\opt.tcl" "$key/$prefix\oltp.tcl" "$key/$prefix\olap.tcl" "$key/$prefix\otc.tcl"
}

#Get generic config data
set genericdict [ ::XML::To_Dict config/generic.xml ]
get_xml_data
set genericdict [ SQLite2Dict "generic" ]
if { $genericdict eq "" } {
set genericdict [ ::XML::To_Dict config/generic.xml ]
Dict2SQLite "generic" $genericdict
}
#get_xml_data
set_globle_config $genericdict

#Make generics global
tsv::set application genericdict $genericdict
guid_init

15 changes: 15 additions & 0 deletions src/generic/genws.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -741,6 +741,14 @@ proc diset { args } {
set body [ subst { "dict": "$dct", "key": "$key2", "value": "$val" } ]
set res [rest::post http://localhost:$ws_port/diset $body ]
putscli $res
#Save new value to SQLite
upvar #0 dbdict dbdict
foreach { key } [ dict keys $dbdict ] {
if { [ dict get $dbdict $key name ] eq $rdbms } {
SQLiteUpdateKeyValue $key $dct $key2 $val
}
}
}
}
Expand Down Expand Up @@ -910,6 +918,13 @@ proc dbset { args } {
set body [ subst { "$opt": "$val" } ]
set res [rest::post http://localhost:$ws_port/dbset $body ]
putscli $res

#Save new setting to SQLite
if { $opt eq "db" } {
SQLiteUpdateKeyValue "generic" "benchmark" "rdbms" $val
} elseif { $opt eq "bm" } {
SQLiteUpdateKeyValue "generic" "benchmark" "bm" $val
}
}
}

Expand Down
Loading

0 comments on commit ebc5143

Please sign in to comment.