Fix the bug concerning the user which is still showed after deletion
Bug: #1663639 Change-Id: Ifc0278076913475282c15d2092caa57354145487 Sem-Ver: bugfix
This commit is contained in:
parent
e0466fe72f
commit
92892640d7
@ -70,5 +70,8 @@ class Project(SynergyObject):
|
||||
def isEnabled(self):
|
||||
return self.get("enabled")
|
||||
|
||||
def removeUser(self, user_id):
|
||||
return self.get("users").pop(user_id, None)
|
||||
|
||||
def setEnabled(self, enabled=True):
|
||||
self.set("enabled", enabled)
|
||||
|
@ -109,6 +109,7 @@ class FairShareManager(Manager):
|
||||
def task(self):
|
||||
with self.fs_condition:
|
||||
try:
|
||||
self.checkUsers()
|
||||
self.calculateFairShare()
|
||||
except Exception as ex:
|
||||
LOG.error(ex)
|
||||
@ -147,7 +148,7 @@ class FairShareManager(Manager):
|
||||
|
||||
def addProject(self, project):
|
||||
if self.projects.get(project.getId(), None):
|
||||
raise Exception("project %r already exists!" % (project.getId()))
|
||||
raise Exception("project %s already exists!" % (project.getId()))
|
||||
|
||||
prj_share = project.getShare()
|
||||
if prj_share.getValue() == 0:
|
||||
@ -170,6 +171,42 @@ class FairShareManager(Manager):
|
||||
del self.projects[prj_id]
|
||||
self.fs_condition.notifyAll()
|
||||
|
||||
def checkUsers(self):
|
||||
if not self.projects:
|
||||
return
|
||||
|
||||
for project in self.projects.values():
|
||||
k_users = self.keystone_manager.getUsers(prj_id=project.getId())
|
||||
k_users_ids = [user.getId() for user in k_users]
|
||||
|
||||
p_users = project.getUsers()
|
||||
p_users_ids = [user.getId() for user in p_users]
|
||||
|
||||
new_user_ids = list(set(k_users_ids) - set(p_users_ids))
|
||||
|
||||
deleted_user_ids = list(set(p_users_ids) - set(k_users_ids))
|
||||
for id in deleted_user_ids:
|
||||
LOG.info("deleting user %s" % id)
|
||||
project.removeUser(id)
|
||||
|
||||
for user in k_users:
|
||||
if user.getId() in new_user_ids:
|
||||
LOG.info("found new user %s" % user.getName())
|
||||
date = datetime.utcnow()
|
||||
|
||||
data = user.getData()
|
||||
data["vcpus"] = float(0)
|
||||
data["memory"] = float(0)
|
||||
data["actual_memory"] = float(0)
|
||||
data["actual_vcpus"] = float(0)
|
||||
data["time_window_from_date"] = date
|
||||
data["time_window_to_date"] = date
|
||||
|
||||
try:
|
||||
project.addUser(user)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def calculateFairShare(self):
|
||||
if not self.projects:
|
||||
return
|
||||
|
@ -385,108 +385,90 @@ class SchedulerManager(Manager):
|
||||
|
||||
def task(self):
|
||||
if self.configured:
|
||||
for project in self.projects.values():
|
||||
users = self.keystone_manager.getUsers(prj_id=project.getId())
|
||||
return
|
||||
|
||||
for user in users:
|
||||
try:
|
||||
project.addUser(user)
|
||||
except Exception:
|
||||
pass
|
||||
else:
|
||||
domain = self.keystone_manager.getDomains(name="default")
|
||||
if not domain:
|
||||
raise Exception("domain'default' not found!")
|
||||
domain = self.keystone_manager.getDomains(name="default")
|
||||
if not domain:
|
||||
raise Exception("domain 'default' not found!")
|
||||
|
||||
domain = domain[0]
|
||||
dom_id = domain.getId()
|
||||
domain = domain[0]
|
||||
dom_id = domain.getId()
|
||||
|
||||
for project in self.keystone_manager.getProjects(domain_id=dom_id):
|
||||
if project.getName() in CONF.SchedulerManager.projects:
|
||||
CONF.SchedulerManager.projects.remove(project.getName())
|
||||
project.setTTL(self.default_TTL)
|
||||
for project in self.keystone_manager.getProjects(domain_id=dom_id):
|
||||
if project.getName() in CONF.SchedulerManager.projects:
|
||||
CONF.SchedulerManager.projects.remove(project.getName())
|
||||
project.setTTL(self.default_TTL)
|
||||
|
||||
try:
|
||||
users = self.keystone_manager.getUsers(
|
||||
prj_id=project.getId())
|
||||
self.projects[project.getName()] = project
|
||||
else:
|
||||
quota = self.nova_manager.getQuota(project.getId())
|
||||
|
||||
for user in users:
|
||||
project.addUser(user)
|
||||
except Exception as ex:
|
||||
LOG.error("Exception has occured", exc_info=1)
|
||||
LOG.error(ex)
|
||||
if quota.getSize("vcpus") <= -1 and \
|
||||
quota.getSize("memory") <= -1 and \
|
||||
quota.getSize("instances") <= -1:
|
||||
|
||||
self.projects[project.getName()] = project
|
||||
else:
|
||||
quota = self.nova_manager.getQuota(project.getId())
|
||||
qc = self.nova_manager.getQuota(project.getId(),
|
||||
is_class=True)
|
||||
|
||||
if quota.getSize("vcpus") <= -1 and \
|
||||
quota.getSize("memory") <= -1 and \
|
||||
quota.getSize("instances") <= -1:
|
||||
self.nova_manager.updateQuota(qc)
|
||||
|
||||
qc = self.nova_manager.getQuota(project.getId(),
|
||||
is_class=True)
|
||||
if len(CONF.SchedulerManager.projects) > 0:
|
||||
raise Exception("projects %s not found, please check the syn"
|
||||
"ergy.conf" % CONF.SchedulerManager.projects)
|
||||
|
||||
self.nova_manager.updateQuota(qc)
|
||||
self.quota_manager.updateSharedQuota()
|
||||
|
||||
if len(CONF.SchedulerManager.projects) > 0:
|
||||
raise Exception("projects %s not found, please check the syn"
|
||||
"ergy.conf" % CONF.SchedulerManager.projects)
|
||||
for prj_ttl in CONF.SchedulerManager.TTLs:
|
||||
prj_name, TTL = self.parseAttribute(prj_ttl)
|
||||
self.projects[prj_name].setTTL(TTL)
|
||||
|
||||
self.quota_manager.updateSharedQuota()
|
||||
for prj_share in CONF.SchedulerManager.shares:
|
||||
prj_name, share_value = self.parseAttribute(prj_share)
|
||||
p_share = self.projects[prj_name].getShare()
|
||||
p_share.setValue(share_value)
|
||||
|
||||
for prj_ttl in CONF.SchedulerManager.TTLs:
|
||||
prj_name, TTL = self.parseAttribute(prj_ttl)
|
||||
self.projects[prj_name].setTTL(TTL)
|
||||
for prj_name, project in self.projects.items():
|
||||
del self.projects[prj_name]
|
||||
self.projects[project.getId()] = project
|
||||
|
||||
for prj_share in CONF.SchedulerManager.shares:
|
||||
prj_name, share_value = self.parseAttribute(prj_share)
|
||||
p_share = self.projects[prj_name].getShare()
|
||||
p_share.setValue(share_value)
|
||||
self.quota_manager.addProject(project)
|
||||
self.fairshare_manager.addProject(project)
|
||||
|
||||
for prj_name, project in self.projects.items():
|
||||
del self.projects[prj_name]
|
||||
self.projects[project.getId()] = project
|
||||
self.quota_manager.updateSharedQuota()
|
||||
self.fairshare_manager.checkUsers()
|
||||
self.fairshare_manager.calculateFairShare()
|
||||
|
||||
self.quota_manager.addProject(project)
|
||||
try:
|
||||
self.dynamic_queue = self.queue_manager.createQueue("DYNAMIC")
|
||||
except Exception as ex:
|
||||
LOG.error("Exception has occured", exc_info=1)
|
||||
LOG.error(ex)
|
||||
|
||||
self.fairshare_manager.addProject(project)
|
||||
self.dynamic_queue = self.queue_manager.getQueue("DYNAMIC")
|
||||
|
||||
self.quota_manager.updateSharedQuota()
|
||||
self.fairshare_manager.calculateFairShare()
|
||||
dynamic_worker = Worker("DYNAMIC",
|
||||
self.dynamic_queue,
|
||||
self.projects,
|
||||
self.nova_manager,
|
||||
self.keystone_manager,
|
||||
self.backfill_depth)
|
||||
dynamic_worker.start()
|
||||
|
||||
try:
|
||||
self.dynamic_queue = self.queue_manager.createQueue("DYNAMIC")
|
||||
except Exception as ex:
|
||||
LOG.error("Exception has occured", exc_info=1)
|
||||
LOG.error(ex)
|
||||
self.workers.append(dynamic_worker)
|
||||
|
||||
self.dynamic_queue = self.queue_manager.getQueue("DYNAMIC")
|
||||
self.notifications = Notifications(self.projects, self.nova_manager)
|
||||
|
||||
dynamic_worker = Worker("DYNAMIC",
|
||||
self.dynamic_queue,
|
||||
self.projects,
|
||||
self.nova_manager,
|
||||
self.keystone_manager,
|
||||
self.backfill_depth)
|
||||
dynamic_worker.start()
|
||||
target = self.nova_manager.getTarget(topic=self.notification_topic,
|
||||
exchange="nova")
|
||||
|
||||
self.workers.append(dynamic_worker)
|
||||
self.listener = self.nova_manager.getNotificationListener(
|
||||
targets=[target],
|
||||
endpoints=[self.notifications])
|
||||
|
||||
self.notifications = Notifications(self.projects,
|
||||
self.nova_manager)
|
||||
self.quota_manager.deleteExpiredServers()
|
||||
|
||||
target = self.nova_manager.getTarget(
|
||||
topic=self.notification_topic, exchange="nova")
|
||||
|
||||
self.listener = self.nova_manager.getNotificationListener(
|
||||
targets=[target],
|
||||
endpoints=[self.notifications])
|
||||
|
||||
self.quota_manager.deleteExpiredServers()
|
||||
|
||||
self.listener.start()
|
||||
self.configured = True
|
||||
self.listener.start()
|
||||
self.configured = True
|
||||
|
||||
def destroy(self):
|
||||
for queue_worker in self.workers:
|
||||
|
Loading…
x
Reference in New Issue
Block a user