|
|
|
@ -1489,15 +1489,17 @@ class Update(MethodsInterface):
|
|
|
|
|
|
|
|
|
|
class Reason():
|
|
|
|
|
Success = 0
|
|
|
|
|
BadSign = 1
|
|
|
|
|
Outdated = 2
|
|
|
|
|
Skip = 3
|
|
|
|
|
Updating = 4
|
|
|
|
|
WrongBinhost = 5
|
|
|
|
|
BadEnv = 6
|
|
|
|
|
EnvNotFound = 7
|
|
|
|
|
SkipSlower = 8
|
|
|
|
|
UnknownError = 9
|
|
|
|
|
LevelWrong = 1
|
|
|
|
|
BadSign = 2
|
|
|
|
|
Outdated = 3
|
|
|
|
|
Skip = 4
|
|
|
|
|
Updating = 5
|
|
|
|
|
WrongBinhost = 6
|
|
|
|
|
BadEnv = 7
|
|
|
|
|
EnvNotFound = 8
|
|
|
|
|
SkipSlower = 9
|
|
|
|
|
UnknownError = 10
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
@ -1512,7 +1514,9 @@ class Update(MethodsInterface):
|
|
|
|
|
Update.Reason.BadSign: "FAILED (Bad sign)",
|
|
|
|
|
Update.Reason.Skip: "SKIP",
|
|
|
|
|
Update.Reason.SkipSlower: "",
|
|
|
|
|
Update.Reason.Success: ""
|
|
|
|
|
Update.Reason.Success: "",
|
|
|
|
|
#TODO formulate better
|
|
|
|
|
Update.Reason.LevelWrong: "FAILED (binhost level is wrong)"
|
|
|
|
|
}.get(reason,reason)
|
|
|
|
|
|
|
|
|
|
def _get_binhost_logger(self):
|
|
|
|
@ -1571,11 +1575,12 @@ class Update(MethodsInterface):
|
|
|
|
|
reason = errors.get(status, self.Reason.UnknownError)
|
|
|
|
|
elif binhost.bad_sign:
|
|
|
|
|
reason = self.Reason.BadSign
|
|
|
|
|
elif not self.is_binhost_level_valid(binhost):
|
|
|
|
|
reason = self.Reason.LevelWrong
|
|
|
|
|
else:
|
|
|
|
|
# SUCCESS
|
|
|
|
|
if not binhost.downgraded or stabilization:
|
|
|
|
|
host = "-> %s" % host
|
|
|
|
|
#TODO add migration binhost check there
|
|
|
|
|
reason = self.Reason.Success
|
|
|
|
|
else:
|
|
|
|
|
reason = self.Reason.Skip
|
|
|
|
@ -1602,10 +1607,26 @@ class Update(MethodsInterface):
|
|
|
|
|
self.Reason.Skip,
|
|
|
|
|
self.Reason.Updating):
|
|
|
|
|
raise UpdateError(_("Failed to find the server with appropriate updates"))
|
|
|
|
|
elif actual_reason is self.Reason.LevelWrong:
|
|
|
|
|
self.clVars.Set("update.cl_update_use_migration_host", Variable.On)
|
|
|
|
|
#TODO add translation
|
|
|
|
|
raise UpdateError(_("Failed to find the server with appropriate level of updates"))
|
|
|
|
|
else:
|
|
|
|
|
raise UpdateError(_("Failed to find the working server with updates"))
|
|
|
|
|
return retval
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def is_binhost_level_valid(self, binhost):
|
|
|
|
|
return self.compare_update_level(binhost) == 0
|
|
|
|
|
|
|
|
|
|
# @variable_module("update")
|
|
|
|
|
def compare_update_level(self, binhost):
|
|
|
|
|
# < 0 binhost level low
|
|
|
|
|
# == 0 binhost level adequate
|
|
|
|
|
# > 0 binhost level high
|
|
|
|
|
if binhost.level is None:
|
|
|
|
|
return None
|
|
|
|
|
return binhost.level - int(self.clVars.Get("update.cl_update_level"))
|
|
|
|
|
|
|
|
|
|
def check_current_binhost(self, binhost_url):
|
|
|
|
|
"""
|
|
|
|
|
Проверка текущего сервера обновлений на валидность
|
|
|
|
@ -1614,7 +1635,8 @@ class Update(MethodsInterface):
|
|
|
|
|
raise UpdateError(_("Current binhost is absent in list of update servers"))
|
|
|
|
|
binhost = self.binhosts_data.get_binhost(binhost_url)
|
|
|
|
|
|
|
|
|
|
if binhost.valid and not binhost.outdated and not binhost.downgraded:
|
|
|
|
|
if binhost.valid and not binhost.outdated and not binhost.downgraded \
|
|
|
|
|
and self.is_binhost_level_valid(binhost):
|
|
|
|
|
if binhost.status == self.binhosts_data.BinhostStatus.Success:
|
|
|
|
|
self.clVars.Set('update.cl_update_binhost_data',
|
|
|
|
|
[[binhost.host, binhost.data,
|
|
|
|
@ -1626,6 +1648,13 @@ class Update(MethodsInterface):
|
|
|
|
|
if not binhost.valid:
|
|
|
|
|
raise UpdateError(
|
|
|
|
|
_("Current binhost {} is not valid").format(binhost_url))
|
|
|
|
|
#TODO migr
|
|
|
|
|
elif not self.is_binhost_level_valid(binhost):
|
|
|
|
|
self.clVars.Set("update.cl_update_use_migration_host", Variable.On)
|
|
|
|
|
#TODO translate
|
|
|
|
|
raise UpdateError(
|
|
|
|
|
_("Current binhost {} has wrong update level. Current level: {} Binhost level: {}").\
|
|
|
|
|
format(binhost_url, self.clVars.Get("update.cl_update_level"), binhost.level, ))
|
|
|
|
|
elif binhost.outdated:
|
|
|
|
|
raise UpdateError(
|
|
|
|
|
_("Current binhost {} is outdated").format(binhost_url))
|
|
|
|
@ -1633,6 +1662,7 @@ class Update(MethodsInterface):
|
|
|
|
|
raise UpdateError(
|
|
|
|
|
_("Binary packages on the current binhost {} "
|
|
|
|
|
"are older than local").format(binhost_url))
|
|
|
|
|
|
|
|
|
|
if self.binhosts_data.gpg:
|
|
|
|
|
packages_fn = self.clVars.Get('update.cl_update_package_cache')
|
|
|
|
|
packages_sign_fn = self.clVars.Get('update.cl_update_package_cache_sign')
|
|
|
|
@ -1658,6 +1688,9 @@ class Update(MethodsInterface):
|
|
|
|
|
binhost_url))
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def get_migration_mirror_url(self, host, level):
|
|
|
|
|
return f"{host}level{level}/"
|
|
|
|
|
|
|
|
|
|
@variable_module("update")
|
|
|
|
|
def detect_best_binhost(self):
|
|
|
|
|
# выполняется переход с серверов unstable обновлней на stable
|
|
|
|
@ -1670,12 +1703,34 @@ class Update(MethodsInterface):
|
|
|
|
|
|
|
|
|
|
self.startTask(_("Searching new binhost"))
|
|
|
|
|
retval = self._search_best_binhost(self.binhosts_data, stabilization)
|
|
|
|
|
|
|
|
|
|
self.clVars.Set('update.cl_update_binhost_data',
|
|
|
|
|
retval or Variable.EmptyTable, force=True)
|
|
|
|
|
|
|
|
|
|
self.endTask()
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def set_migration_host(self):
|
|
|
|
|
print("TESTTEST")
|
|
|
|
|
retval = []
|
|
|
|
|
dv = self.clVars
|
|
|
|
|
last_ts = dv.Get('cl_update_last_timestamp')
|
|
|
|
|
binhost_list = dv.Get('cl_update_binhost_migration_list')
|
|
|
|
|
level = self.clVars.Get('update.cl_update_level')
|
|
|
|
|
binhost_list = [self.get_migration_mirror_url(x, level) for x in binhost_list]
|
|
|
|
|
binhosts_data = Binhosts(
|
|
|
|
|
# значение малозначимо, поэтому берётся из собирающей системы
|
|
|
|
|
dv.GetInteger('cl_update_binhost_timeout'),
|
|
|
|
|
dv.Get('cl_update_binhost_revision_path'),
|
|
|
|
|
dv.Get('cl_update_binhost_timestamp_path'),
|
|
|
|
|
last_ts, binhost_list,
|
|
|
|
|
self.get_arch_machine(),
|
|
|
|
|
gpg=dv.Get('update.cl_update_gpg'))
|
|
|
|
|
migration_host = sorted(binhosts_data.get_binhosts(), reverse=True)[0]
|
|
|
|
|
retval.append([migration_host.host, migration_host.data,
|
|
|
|
|
str(migration_host.timestamp),
|
|
|
|
|
str(migration_host.duration)])
|
|
|
|
|
return retval
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def update_rep_list(self):
|
|
|
|
|
"""
|
|
|
|
|