From: jiil.hyoun Date: Fri, 12 Oct 2012 01:37:48 +0000 (+0900) Subject: [Title] apply DBi but only using sqlite3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=36de739a37076e54a68bb4d55cbfc49305b7cdc6;p=sdk%2Ftools%2Fsdk-build.git [Title] apply DBi but only using sqlite3 [Type] Feature [Module] Toolchain / [Priority] Major [Jira#] [Redmine#] 7185 [Problem] [Cause] [Solution] [TestCase] Change-Id: Ief5f1d6e15d7a1e1fcb7aca653d1d29e2033e97f --- diff --git a/src/build_server/BinaryUploadProject.rb b/src/build_server/BinaryUploadProject.rb index 49f7eb8..8399469 100644 --- a/src/build_server/BinaryUploadProject.rb +++ b/src/build_server/BinaryUploadProject.rb @@ -27,7 +27,7 @@ Contributors: =end require 'fileutils' -require 'sqlite3' +require 'dbi' $LOAD_PATH.unshift File.dirname(__FILE__) require "CommonProject.rb" require "RegisterPackageJob.rb" @@ -118,11 +118,7 @@ class BinaryUploadProject < CommonProject def include_package?(name, version=nil, os=nil) - if name == @pkg_name then - return true - else - return false - end + return (name == @pkg_name) end @@ -132,6 +128,7 @@ class BinaryUploadProject < CommonProject f.puts "TYPE=BINARY" f.puts "PACKAGE_NAME=#{@pkg_name}" end + return true end @@ -147,11 +144,12 @@ class BinaryUploadProject < CommonProject if l.start_with?("PACKAGE_NAME=") pkg_name = l[idx,length].strip else - next - end + next + end end end @pkg_name = pkg_name + return true end end diff --git a/src/build_server/BuildServer.rb b/src/build_server/BuildServer.rb index f66073c..16336b4 100644 --- a/src/build_server/BuildServer.rb +++ b/src/build_server/BuildServer.rb @@ -28,7 +28,7 @@ Contributors: require 'rubygems' require 'fileutils' -require 'sqlite3' +require 'dbi' $LOAD_PATH.unshift File.dirname(__FILE__) require "SocketJobRequestListener.rb" require "RemoteBuildJob.rb" @@ -399,118 +399,121 @@ class BuildServer def create_db() + result = true # create DB - db_file = "#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" + sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" begin - db = SQLite3::Database.new db_file + db = DBI.connect(sqlite_db_file) # create table - db.execute "CREATE TABLE IF NOT EXISTS distributions(name VARCHAR(32) PRIMARY KEY, pkgsvr_url VARCHAR(256), pkgsvr_addr VARCHAR(64))" - db.execute "CREATE TABLE IF NOT EXISTS remote_build_servers(id INTEGER PRIMARY KEY, svr_addr VARCHAR(64))" - db.execute "CREATE TABLE IF NOT EXISTS sync_pkg_servers(id INTEGER PRIMARY KEY, pkgsvr_url VARCHAR(256), period INTEGER, dist_name VARCHAR(32))" - db.execute "CREATE TABLE IF NOT EXISTS supported_os(name VARCHAR(32) PRIMARY KEY)" - db.execute "CREATE TABLE IF NOT EXISTS projects(id INTEGER PRIMARY KEY, name VARCHAR(32), type VARCHAR(32), password VARCHAR(32), dist_name VARCHAR(32))" - db.execute "CREATE TABLE IF NOT EXISTS project_os(prj_id INTEGER, os_name VARCHAR(32))" - db.execute "CREATE TABLE IF NOT EXISTS users(user_id INTEGER PRIMARY KEY, email VARCHAR(256), password VARCHAR(256), password_salt VARCHAR(256), user_name VARCHAR(256), group_id VARCHAR(256))" - db.execute "CREATE TABLE IF NOT EXISTS groups(group_id INTEGER PRIMARY KEY, group_name VARCHAR(256))" - rescue SQLite3::Exception => e + db.do "CREATE TABLE IF NOT EXISTS distributions(name VARCHAR(32) PRIMARY KEY, pkgsvr_url VARCHAR(256), pkgsvr_addr VARCHAR(64))" + db.do "CREATE TABLE IF NOT EXISTS remote_build_servers(id INTEGER PRIMARY KEY AUTOINCREMENT, svr_addr VARCHAR(64))" + db.do "CREATE TABLE IF NOT EXISTS sync_pkg_servers(id INTEGER PRIMARY KEY AUTOINCREMENT, pkgsvr_url VARCHAR(256), period INTEGER, dist_name VARCHAR(32))" + db.do "CREATE TABLE IF NOT EXISTS supported_os(name VARCHAR(32) PRIMARY KEY)" + db.do "CREATE TABLE IF NOT EXISTS projects(id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(32), type VARCHAR(32), password VARCHAR(32), dist_name VARCHAR(32))" + db.do "CREATE TABLE IF NOT EXISTS project_os(prj_id INTEGER, os_name VARCHAR(32))" + db.do "CREATE TABLE IF NOT EXISTS users(user_id INTEGER PRIMARY KEY AUTOINCREMENT, email VARCHAR(256), password VARCHAR(256), password_salt VARCHAR(256), user_name VARCHAR(256), group_id VARCHAR(256))" + db.do "CREATE TABLE IF NOT EXISTS groups(group_id INTEGER PRIMARY KEY AUTOINCREMENT, group_name VARCHAR(256))" + rescue DBI::DatabaseError => e puts "DB Creation failed!" - puts e + puts e.errstr + result = false ensure - db.close if db + db.disconnect if db end + return result end # save def save_db() + result = true # distribution @distmgr.save_db() - db_file = "#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" + sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" begin # open DB - db = SQLite3::Database.open db_file + db = DBI.connect(sqlite_db_file) # remote_build_servers - db.execute "DELETE FROM remote_build_servers" - idx = 0 + db.do "DELETE FROM remote_build_servers" @friend_servers.each { |svr| - db.execute "INSERT INTO remote_build_servers VALUES('#{idx}','#{svr.ip}:#{svr.port}')" - idx += 1 + db.do "INSERT INTO remote_build_servers (svr_addr) VALUES('#{svr.ip}:#{svr.port}')" } - + # sync_pkg_servers - db.execute "DELETE FROM sync_pkg_servers" - idx = 0 + db.do "DELETE FROM sync_pkg_servers" @remote_pkg_servers.each { |svr| - db.execute "INSERT INTO sync_pkg_servers VALUES('#{idx}','#{svr[0]}','#{@pkg_sync_period}','#{svr[1]}')" - idx += 1 + db.do "INSERT INTO sync_pkg_servers (pkgsvr_url,period,dist_name) VALUES('#{svr[0]}','#{@pkg_sync_period}','#{svr[1]}')" } # supported_os - db.execute "DELETE FROM supported_os" + db.do "DELETE FROM supported_os" @supported_os_list.each { |os| - db.execute "INSERT INTO supported_os VALUES('#{os}')" + db.do "INSERT INTO supported_os VALUES('#{os}')" } - - rescue SQLite3::Exception => e + + rescue DBI::DatabaseError => e puts "DB update failed!" - puts e + puts e.errstr + result = false ensure - db.close if db + db.disconnect if db end + + return result end # load def load_db() + result = true # distribution @distmgr.load_db() - db_file = "#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" + sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" begin # open DB - db = SQLite3::Database.open db_file - db.results_as_hash = true + db = DBI.connect(sqlite_db_file) + #db.results_as_hash = true # remote_build_servers @friend_servers = [] - stm = db.prepare "SELECT * FROM remote_build_servers" - rs = stm.execute - rs.each { |row| + sth = db.execute "SELECT * FROM remote_build_servers" + sth.fetch_hash { |row| add_remote_server( - row['svr_addr'].split(":")[0], + row['svr_addr'].split(":")[0], row['svr_addr'].split(":")[1].to_i) } - stm.close if stm - + sth.finish # sync_package_servers @remote_pkg_servers = [] - stm = db.prepare "SELECT * FROM sync_pkg_servers" - rs = stm.execute - rs.each { |row| + sth = db.execute "SELECT * FROM sync_pkg_servers" + sth.fetch_hash { |row| add_sync_package_server( row['pkgsvr_url'], row['dist_name'] ) @pkg_sync_period = row['period'].to_i } - stm.close if stm + sth.finish # supported_os @supported_os_list = [] - stm = db.prepare "SELECT * FROM supported_os" - rs = stm.execute - rs.each { |row| + sth = db.execute "SELECT * FROM supported_os" + sth.fetch_hash { |row| add_target_os( row['name'] ) } - rescue SQLite3::Exception => e + sth.finish + rescue DBI::DatabaseError => e puts "DB loading failed!" - puts e + puts e.errstr + result = false ensure - stm.close if stm - db.close if db + sth.finish if not sth.finished? + db.disconnect if db end + return result end end diff --git a/src/build_server/BuildServerController.rb b/src/build_server/BuildServerController.rb index f935964..6ba3759 100644 --- a/src/build_server/BuildServerController.rb +++ b/src/build_server/BuildServerController.rb @@ -259,10 +259,13 @@ class BuildServerController # add if server.add_remote_server( ip, port ) then - server.save_db() - puts "Friend server is added successfully!" - - return true + if server.save_db() then + puts "Friend server is added successfully!" + return true + else + puts "Add friend server to DB is failed!" + return false + end else puts "Friend server already exists in list!" return false @@ -276,10 +279,13 @@ class BuildServerController # add if server.remove_remote_server( ip, port ) then - server.save_db() - puts "Friend server is removed successfully!" - - return true + if server.save_db() then + puts "Friend server is removed successfully!" + return true + else + puts "Remove friend server from DB is failed!" + return false + end else puts "Friend server does not exist in list!" return false @@ -300,9 +306,13 @@ class BuildServerController # add if server.add_target_os( os_name ) then - server.save_db() - puts "Target OS is added successfully!" - return true + if server.save_db() then + puts "Target OS is added successfully!" + return true + else + puts "Add target OS to DB is failed!" + return false + end else puts "Target OS already exists in list!" return false @@ -317,9 +327,13 @@ class BuildServerController # add if server.remove_target_os( os_name ) then - server.save_db() - puts "Target OS is removed successfully!" - return true + if server.save_db() then + puts "Target OS is removed successfully!" + return true + else + puts "Remove target OS from DB failed!" + return false + end else puts "Target OS does not exist in list!" return false @@ -334,9 +348,13 @@ class BuildServerController # add if server.distmgr.add_distribution( dist_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port ) then - server.save_db() - puts "Distribution is added successfully!" - return true + if server.save_db() then + puts "Distribution is added successfully!" + return true + else + puts "Add distribution to DB failed!" + return false + end else puts "Distribution already exists in list!" return false @@ -351,9 +369,13 @@ class BuildServerController # remove if server.distmgr.remove_distribution( dist_name ) then - server.save_db() - puts "Distribution is removed successfully!" - return true + if server.save_db() then + puts "Distribution is removed successfully!" + return true + else + puts "Remove distribution from DB is failed!" + return false + end else puts "Distribution does not exist in list!" return false @@ -371,9 +393,13 @@ class BuildServerController # add if server.add_sync_package_server( url, dist_name ) then - server.save_db() - puts "Remote package server is added!" - return true + if server.save_db() then + puts "Remote package server is added!" + return true + else + puts "Remove package server from DB is failed!" + return false + end else puts "The server already exists in list!" return false @@ -403,9 +429,13 @@ class BuildServerController # remove if server.remove_sync_package_server( url, dist_name ) then - server.save_db() - puts "Remote package server is removed!" - return true + if server.save_db() then + puts "Remote package server is removed!" + return true + else + puts "Remove remote package server from DB is failed!" + return false + end else puts "The server does not exist in list!" return false diff --git a/src/build_server/CommonProject.rb b/src/build_server/CommonProject.rb index 37716b5..11745e9 100644 --- a/src/build_server/CommonProject.rb +++ b/src/build_server/CommonProject.rb @@ -112,14 +112,4 @@ class CommonProject end return nil end - - - def set_project_id(id) - @project_id = id - end - - - def get_project_id() - return @project_id - end end diff --git a/src/build_server/DistributionManager.rb b/src/build_server/DistributionManager.rb index 0c7b7ed..dbca431 100644 --- a/src/build_server/DistributionManager.rb +++ b/src/build_server/DistributionManager.rb @@ -118,52 +118,56 @@ class DistributionManager # save def save_db() - db_file = "#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db" + result = true + sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db" begin # open DB - db = SQLite3::Database.open db_file + db = DBI.connect(sqlite_db_file) # distributions - db.execute "DELETE FROM distributions" + db.do "DELETE FROM distributions" @distributions.each { |dist| dist_addr = dist.pkgsvr_ip + ":" + dist.pkgsvr_port.to_s - db.execute "INSERT INTO distributions VALUES('#{dist.name}','#{dist.pkgsvr_url}','#{dist_addr}')" + db.do "INSERT INTO distributions VALUES('#{dist.name}','#{dist.pkgsvr_url}','#{dist_addr}')" } - rescue SQLite3::Exception => e + rescue DBI::DatabaseError => e puts "DB update failed!" - puts e + puts e.errstr + result = false ensure - db.close if db + db.disconnect if db end + return result end # load def load_db() + result = true @distributions = [] - db_file = "#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db" + sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db" begin # open DB - db = SQLite3::Database.open db_file - db.results_as_hash = true + db = DBI.connect(sqlite_db_file) # distributions - stm = db.prepare "SELECT * FROM distributions" - rs = stm.execute - rs.each { |row| + rs = db.execute "SELECT * FROM distributions" + rs.fetch_hash { |row| pkgsvr_ip = row['pkgsvr_addr'].split(":")[0] pkgsvr_port = row['pkgsvr_addr'].split(":")[1].to_i add_distribution_internal(row['name'], row['pkgsvr_url'], pkgsvr_ip, pkgsvr_port) } - rescue SQLite3::Exception => e + rs.finish + rescue DBI::DatabaseError => e puts "DB loading failed!" - puts e + puts e.errstr + result = false ensure - stm.close if stm - db.close if db + rs.finish if not rs.finished? + db.disconnect if db end - + return result end diff --git a/src/build_server/GitBuildProject.rb b/src/build_server/GitBuildProject.rb index 050cd28..670e867 100644 --- a/src/build_server/GitBuildProject.rb +++ b/src/build_server/GitBuildProject.rb @@ -27,7 +27,7 @@ Contributors: =end require 'fileutils' -require 'sqlite3' +require 'dbi' $LOAD_PATH.unshift File.dirname(__FILE__) require "CommonProject.rb" require "GitBuildJob.rb" @@ -184,6 +184,7 @@ class GitBuildProject < CommonProject f.puts "GIT_REPOSITORY=#{@repository}" f.puts "GIT_BRANCH=#{@branch}" end + return true end @@ -232,5 +233,6 @@ class GitBuildProject < CommonProject version = file[0,vlen] add_package_info( version, "#{pkginfo_dir}/#{file}" ) end + return true end end diff --git a/src/build_server/ProjectManager.rb b/src/build_server/ProjectManager.rb index f8bf733..df64083 100644 --- a/src/build_server/ProjectManager.rb +++ b/src/build_server/ProjectManager.rb @@ -27,7 +27,7 @@ Contributors: =end require 'fileutils' -require 'sqlite3' +require 'dbi' $LOAD_PATH.unshift File.dirname(__FILE__) require "GitBuildProject.rb" require "BinaryUploadProject.rb" @@ -247,69 +247,56 @@ class ProjectManager return get_project(name, dist_name) end - + # save def save_db() - # generate project id if not exist? - last_id = -1 - @projects.each { |prj| - if prj.get_project_id() > last_id then last_id = prj.get_project_id() end - } - new_id = last_id + 1 - @projects.each { |prj| - if prj.get_project_id() == -1 then - prj.set_project_id(new_id) - new_id += 1 - end - } - - db_file = "#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db" + result = true + sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db" begin - # open DB - db = SQLite3::Database.open db_file - db.results_as_hash = true - + # open # + db = DBI.connect(sqlite_db_file) + # delete all rows - db.execute "DELETE FROM projects" - db.execute "DELETE FROM project_os" + db.do "DELETE FROM projects" + db.do "DELETE FROM project_os" # insert project info @projects.each { |prj| - prj_id = prj.get_project_id() # COMMON - db.execute "INSERT INTO projects VALUES(#{prj_id}, '#{prj.name}', '#{prj.type}', '#{prj.passwd}', '#{prj.dist_name}')" + db.do "INSERT INTO projects (name,type,password,dist_name) VALUES('#{prj.name}', '#{prj.type}', '#{prj.passwd}', '#{prj.dist_name}')" # OS + prj_id = db.select_one("select last_insert_rowid()") prj.os_list.each { |os| - db.execute "INSERT INTO project_os VALUES('#{prj_id}','#{os}')" + db.do "INSERT INTO project_os VALUES('#{prj_id}','#{os}')" } - prj.save_db() + if not prj.save_db() then raise RuntimeError ,"Save project DB is failed!" end } - rescue SQLite3::Exception => e + rescue DBI::DatabaseError => e puts "DB update failed!" - puts e + puts e.errstr + result = false ensure - db.close if db + db.disconnect if db end + return result end # load def load_db() + result = true @projects = [] - db_file = "#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db" + sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db" begin # open DB - db = SQLite3::Database.open db_file - db.results_as_hash = true + db = DBI.connect(sqlite_db_file) # distributions - stm = db.prepare "SELECT * FROM projects" - rs = stm.execute - stm2 = nil - rs.each { |row| + rs = db.execute "SELECT * FROM projects" + rs.fetch_hash { |row| prj_id = row['id'] prj_name = row['name'] prj_type = row['type'] @@ -319,36 +306,35 @@ class ProjectManager @server.log.info "Loading project : #{prj_name}" # os prj_os_list = [] - stm2 = db.prepare "SELECT os_name FROM project_os WHERE prj_id = #{prj_id}" - rs2 = stm2.execute - rs2.each { |row2| + rs2 = db.execute "SELECT os_name FROM project_os WHERE prj_id = #{prj_id}" + rs2.fetch { |row2| prj_os_list.push row2[0] } - stm2.close if stm2 - stm2 = nil + rs2.finish if prj_type == "GIT" then new_project = GitBuildProject.new(prj_name, @server, prj_os_list, prj_dist) else new_project = BinaryUploadProject.new(prj_name, @server, prj_os_list, prj_dist) end - new_project.set_project_id(prj_id) if not prj_passwd.empty? then new_project.passwd = prj_passwd end - new_project.load_db() + if not new_project.load_db() then raise RuntimeError, "Project DB load failed!" end @projects.push new_project } - rescue SQLite3::Exception => e + rs.finish + rescue DBI::DatabaseError => e puts "DB loading failed!" - puts e + puts e.errstr + result = false ensure - stm.close if stm - stm2.close if stm2 - db.close if db + rs.finish if not rs.finished? + db.disconnect if db end + return result end