Merge branch 'backend_manual' into 'backend_uu'

Backend manual

See merge request kylinos-src/update-manager-group/kylin-system-updater!511
This commit is contained in:
luoxueyi 2022-10-21 03:44:17 +00:00
commit 41df9b2a46
3 changed files with 88 additions and 38 deletions

View File

@ -349,13 +349,6 @@ class MessageSend():
def GetLocalTid(self, key):
# 试图获取本地tid
try:
# if os.path.exists(LOCALTIDDIR+LOCALTIDFILE):
# with open(LOCALTIDDIR+LOCALTIDFILE, "r") as f:
# self.localtid = f.readline()
# # print(self.localtid)
# else:
# self.localtid = ""
# 存放至数据库
tid = self.collector.updateManager.sqlite3_server.select_from_tid("tid",key)
if tid == "None" or tid == None:

View File

@ -17,41 +17,53 @@ from SystemUpdater.Core.utils import get_config_patch
import apt_pkg
from ..backend import InstallBackend
DB_FILE = os.path.join("/var/cache/kylin-system-updater/kylin-system-updater.db")
UMDB_FILE = os.path.join("/var/cache/kylin-system-updater/kylin-system-updater.db")
# UMDB_FILE = os.path.join("/var/cache/kylin-system-updater/kylin-system-updater.db")
INSTALLED_LIST = [{"item": "errorcode", "type": "int", "default": "0"}]
DISPALY_LIST = []
class Sqlite3Server(object):
def __init__(self, window_main):
def __init__(self, updateManager):
self.connect = None
self.window_main = window_main
self.window_main = updateManager
self.config_path = get_config_patch()
logging.info(_("Init Sqlite3Server..."))
self.init_sqlit()
# uncoverable配置文件
self.ucconfigs = UpgradeConfig(datadir = "/etc/kylin-version", name = "kylin-system-version.conf")
self._system_version_config()
# 初始化连接数据库
# 初始化连接数据库,修改为使用时连接
def init_sqlit(self):
try:
logging.info(_("Initialize the connection to the database ..."))
if os.path.isfile(DB_FILE):
self.connect = sqlite3.connect(DB_FILE, check_same_thread=False)
self.cursor = self.connect.cursor()
self.insert_new_field()
else:
logging.info(_("Initialize database files ..."))
if not os.path.isfile(DB_FILE):
if not os.path.isdir(os.path.dirname(DB_FILE)):
os.makedirs(os.path.dirname(DB_FILE))
shutil.copy("/usr/share/kylin-system-updater/kylin-system-updater.db", os.path.dirname(DB_FILE))
self.connect = sqlite3.connect(DB_FILE, check_same_thread=False)
self.cursor = self.connect.cursor()
self.insert_new_field()
except Exception as e:
logging.error(_("Failed to initialize the database: %s"), str(e))
logging.error("Failed to initialize database files: %s", str(e))
#connect连接数据库
def connect_database(self):
try:
logging.debug("Connect database ...")
self.connect = sqlite3.connect(DB_FILE, check_same_thread=False)
self.cursor = self.connect.cursor()
except Exception as e:
logging.error("Failed to connect database: %s", str(e))
#disconnect连接数据库
def disconnect_database(self):
try:
logging.debug("Disconnect database ...")
if self.connect != None:
self.connect.close()
if self.connect != None:
del self.cursor
except Exception as e:
logging.error("Failed to disconnect database: %s", str(e))
# 数据库表格中动态增加新的字段用于扩展
def insert_new_field(self):
@ -99,33 +111,42 @@ class Sqlite3Server(object):
# 写入数据到installed表中
def insert_into_installed(self, *args, **kwargs):
self.connect_database()
self.cursor.execute(
"insert into installed (appname, version, time, description, icon, statue, keyword, errorcode) values(?,"
"?,?,?,?,?,?,?)",
(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]))
self.connect.commit()
self.disconnect_database()
# 写入数据到display表中
def insert_into_display(self, *args, **kwargs):
self.connect_database()
try:
sql = "update display set " + args[0] + "='" + args[1] + "' where id = 1"
self.cursor.execute(sql)
self.connect.commit()
except Exception as e:
logging.error("Insert error: %s.", str(e))
self.disconnect_database()
return False
logging.info("Database: Insert (%s=%s) To display Complete ...", args[0], args[1])
self.disconnect_database()
return True
# 写入数据到tid_search表中
def insert_into_tid(self, *args, **kwargs):
self.connect_database()
self.cursor.execute(
"insert into tid_search (key, tid) values(?,?)",
(args[0], args[1]))
self.connect.commit()
self.disconnect_database()
# 搜索tid_search表获取tid值
def select_from_tid(self, *args, **kwargs):
retval = ''
self.connect_database()
try:
sql = "select "+args[0]+" from tid_search where key='"+args[1]+"'"
self.cursor.execute(sql)
@ -133,33 +154,42 @@ class Sqlite3Server(object):
if len(rets)!= 0:
if len(rets[0])!=0:
ret_first = rets[0]
return str(ret_first[0])
retval = str(ret_first[0])
except Exception as e:
logging.error("Insert error: %s.", str(e))
self.disconnect_database()
logging.info(_("Database: Select data Complete..."))
return ""
self.disconnect_database()
return retval
# 读出display表中数据
def select_from_display(self, *args, **kwargs):
try:
self.connect_database()
sql = "select "+args[0]+" from display"
self.cursor.execute(sql)
self.connect.commit()
return str(self.cursor.fetchone()[0])
retval = str(self.cursor.fetchone()[0])
self.disconnect_database()
return retval
except Exception as e:
logging.error("select error: %s.", str(e))
self.disconnect_database()
return "Error"
# 写入updateinfos表中
def insert_into_updateinfo(self, *args, **kwargs):
try:
self.connect_database()
self.cursor.execute(
"insert into updateinfos (appname, version, description, date, status, keyword, errorcode, appname_cn, status_cn, changelog) values(?,"
"?,?,?,?,?,?,?,?,?)",
(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]))
self.connect.commit()
self.disconnect_database()
except Exception as e:
logging.error("Insert error: %s.", str(e))
self.disconnect_database()
logging.info(_("Database: Insert To Complete..."))
# 接收更新列表与信息,生成数据并插入数据库中
@ -219,6 +249,8 @@ class Sqlite3Server(object):
pkgversion = str(pkgversion).split('=')[-1]
logging.info("Complete system upgrade, refresh system version ...")
self._refresh_system_version(pkgversion)
#移除step-two标记
self._removal_of_marker()
#FIXME: 临时方案 PHP
PHPSeverSend(_appname=pkgname, _appversion=pkgversion, _statue=status, _errorcode="10000100", _errorstring=errstr)
@ -371,6 +403,8 @@ class Sqlite3Server(object):
pkgversion = str(pkgversion).split('=')[-1]
logging.info("Complete system upgrade, refresh system version ...")
self._refresh_system_version(str(pkgversion))
#移除step-two标记
self._removal_of_marker()
elif mode == InstallBackend.MODE_INSTALL_SYSTEM: # 全盘升级
self.insert_into_updateinfo(_("Upgrade System"), "", "This is a complete system upgrade, equivalent to the implementation of apt dist-upgrade", timestr, status, "1", errstr, str("全盘升级"), status_cn, " ")
@ -379,6 +413,8 @@ class Sqlite3Server(object):
if status == "success":
# 更新版本号
self._refresh_system_version(pseudo_version=True)
#移除step-two标记
self._removal_of_marker()
else:
logging.warning("Cache is None.")
@ -425,19 +461,32 @@ class Sqlite3Server(object):
pass
return pkgs_install,pkgs_upgrade,pkgs_remove
#查找数据库
def find_msg_from_datebase(self, table, field, action = 'check', cid = 0):
# 查询数据
def _removal_of_marker(self):
try:
sql = "select "+field+" from "+table
self.cursor.execute(sql)
update_count = self.cursor.fetchone()[0]
logging.info("%d history updates detected.", update_count)
marker_path = "/var/cache/kylin-update-manager/ignoreOrDelay"
if os.path.exists(marker_path):
with open(marker_path, 'r+') as f:
line= f.readline()
if "2107" in line or "2203" in line:
f.seek(0)
f.truncate()
except Exception as e:
logging.error("Check update error: %s", str(e))
logging.error("Removing the upgrade success mark error: %s.",str(e))
# #查找数据库
# def find_msg_from_datebase(self, table, field, action = 'check', cid = 0):
# # 查询数据
# try:
# sql = "select "+field+" from "+table
# self.cursor.execute(sql)
# update_count = self.cursor.fetchone()[0]
# logging.info("%d history updates detected.", update_count)
# except Exception as e:
# logging.error("Check update error: %s", str(e))
def _system_version_config(self):
try:
self.connect_database()
sql = "select init_version from display where id=1"
self.cursor.execute(sql)
_is_init_verison = self.cursor.fetchone()[0]
@ -448,8 +497,10 @@ class Sqlite3Server(object):
sql = "update display set init_version = 'no'"
self.cursor.execute(sql)
self.connect.commit()
self.disconnect_database()
except Exception as e:
logging.error(str(e))
self.disconnect_database()
def _refresh_system_version(self, update_version='', os_version = '', pseudo_version = False):
try:
@ -545,6 +596,7 @@ class Sqlite3Server(object):
cursor.execute(sql)
connect.commit()
retval = cursor.fetchone()
connect.close()
if retval != None and len(retval) != 0:
return str(retval[0])
else:

View File

@ -206,7 +206,8 @@ class InstallBackend():
#检查是否存在可升级的包
if len(pkgs_install) == 0 and len(pkgs_upgrade) == 0 and len(pkgs_remove) == 0 and len(pkgs_downgrade) == 0:
raise UpdateBaseError(ERROR_NOT_UPGRADE_PACKAGES)
pkgs_install,pkgs_upgrade = self._make_pkgs_list(self.cache,self.upgrade_data.groups_pkgs,self.now_upgrade.upgrade_groups,self.now_upgrade.single_pkgs)
logging.warning("There is an exception in the update package install = %r upgrade = %r",pkgs_install,pkgs_upgrade)
# if self.action_mode == self.MODE_INSTALL_SINGLE:
# logging.warning("MODE_INSTALL_SINGLE install:%s , upgrade:%s remove:%s",str(pkgs_install),str(pkgs_upgrade),str(pkgs_remove))
@ -362,6 +363,7 @@ class InstallBackend():
# 没找到包或格式不正确
self.window_main.dbusController.UpdateInstallFinished(False, pkgs_install, "'"+pkg_name+"' is not in cache", "")
return
self._start_install_lock(caller=caller)
self.commit(self.ACTION_INSTALL,pkgs_install,[],[])
except Exception as e:
logging.error(str(e))
@ -558,8 +560,11 @@ class InstallBackend():
continue
for pkg in pkgs_upgrade + pkgs_install:
pkg_cache = cache[pkg]
if pkg_cache.is_upgradable == False and pkg_cache.is_installed == True:
logging.warning("pkg(%s) not upgrade or install and will be continue...",pkg)
continue
pkg_cache.mark_install(False, True, True)
if pkg_cache.is_upgradable == True: