Change-Id: Ic2d839670f9723e8f64fda37bd028e4a9ae3caf8
This commit is contained in:
xiaodongwang 2014-08-08 23:30:09 -07:00
parent 5150166d82
commit 6664d593a1
8 changed files with 55 additions and 19 deletions

View File

@ -33,7 +33,7 @@ def deploy(cluster_id, hosts_id_list, username=None):
.. note:: .. note::
The function should be called out of database session. The function should be called out of database session.
""" """
with util.lock('serialized_action') as lock: with util.lock('serialized_action', timeout=1000) as lock:
if not lock: if not lock:
raise Exception('failed to acquire lock to deploy') raise Exception('failed to acquire lock to deploy')

View File

@ -90,9 +90,15 @@ def update_progress(cluster_hosts):
adapter = cluster.adapter adapter = cluster.adapter
os_installer = adapter.adapter_os_installer os_installer = adapter.adapter_os_installer
os_installer_name = os_installer.instance_name if os_installer:
os_installer_name = os_installer.name
else:
os_installer_name = None
package_installer = adapter.adapter_package_installer package_installer = adapter.adapter_package_installer
package_installer_name = package_installer.instance_name if package_installer:
package_installer_name = package_installer.name
else:
package_installer_name = None
distributed_system_name = cluster.distributed_system_name distributed_system_name = cluster.distributed_system_name
os_name = cluster.os_name os_name = cluster.os_name
@ -103,6 +109,19 @@ def update_progress(cluster_hosts):
hostids = [clusterhost.host.id for clusterhost in clusterhosts] hostids = [clusterhost.host.id for clusterhost in clusterhosts]
cluster_hosts.update({clusterid: hostids}) cluster_hosts.update({clusterid: hostids})
logging.info(
'update progress for '
'os_installer_name %s,'
'os_names %s,'
'package_installer_name %s,'
'distributed_systems %s,'
'cluster_hosts %s',
os_installer_name,
os_names,
package_installer_name,
distributed_systems,
cluster_hosts
)
progress_calculator.update_progress( progress_calculator.update_progress(
os_installer_name, os_installer_name,
os_names, os_names,

View File

@ -29,9 +29,11 @@ from compass.db import models
def lock(lock_name, blocking=True, timeout=10): def lock(lock_name, blocking=True, timeout=10):
redis_instance = redis.Redis() redis_instance = redis.Redis()
instance_lock = redis_instance.lock(lock_name, timeout=timeout) instance_lock = redis_instance.lock(lock_name, timeout=timeout)
owned = False
try: try:
locked = instance_lock.acquire(blocking=blocking) locked = instance_lock.acquire(blocking=blocking)
if locked: if locked:
owned = True
logging.debug('acquired lock %s', lock_name) logging.debug('acquired lock %s', lock_name)
yield instance_lock yield instance_lock
else: else:
@ -45,9 +47,13 @@ def lock(lock_name, blocking=True, timeout=10):
yield None yield None
finally: finally:
if owned:
instance_lock.acquired_until = 0 instance_lock.acquired_until = 0
instance_lock.release() instance_lock.release()
logging.debug('released lock %s', lock_name) logging.debug('released lock %s', lock_name)
else:
logging.debug('nothing to release %s', lock_name)
""" """
def update_cluster_hosts(cluster_hosts, def update_cluster_hosts(cluster_hosts,

View File

@ -88,8 +88,8 @@ def get_subnet(
) )
@utils.wrap_to_dict(RESP_FIELDS) @utils.wrap_to_dict(RESP_FIELDS)
def add_subnet( def add_subnet(
session, creator, subnet, session, creator, exception_when_existing=True,
exception_when_existing=True, **kwargs subnet=None, **kwargs
): ):
"""Create a subnet.""" """Create a subnet."""
return utils.add_db_object( return utils.add_db_object(

View File

@ -586,6 +586,7 @@ class ClusterHost(BASE, TimestampMixin, HelperMixin):
host.state.state != 'SUCCESSFUL' host.state.state != 'SUCCESSFUL'
): ):
return host.state_dict() return host.state_dict()
else:
return self.state.to_dict() return self.state.to_dict()
def to_dict(self): def to_dict(self):
@ -598,9 +599,11 @@ class ClusterHost(BASE, TimestampMixin, HelperMixin):
'owner': self.owner, 'owner': self.owner,
'clustername': self.clustername, 'clustername': self.clustername,
'hostname': self.hostname, 'hostname': self.hostname,
'name': self.name, 'name': self.name
'roles': [role.to_dict() for role in self.roles]
}) })
roles = self.roles
if roles:
dict_info['roles'] = [role.to_dict() for role in roles]
return dict_info return dict_info

View File

@ -89,9 +89,13 @@ class OSMatcher(object):
def match(self, os_installer_name, os_name): def match(self, os_installer_name, os_name):
"""Check if the os matcher is acceptable.""" """Check if the os matcher is acceptable."""
if os_name is None:
return False
else:
return all([ return all([
self.name_ == os_installer_name, self.name_ == os_installer_name,
self.os_regex_.match(os_name)]) self.os_regex_.match(os_name)
])
def update_progress(self, fullname, progress): def update_progress(self, fullname, progress):
"""Update progress.""" """Update progress."""
@ -123,9 +127,13 @@ class PackageMatcher(object):
def match(self, package_installer_name, target_system): def match(self, package_installer_name, target_system):
"""Check if the package matcher is acceptable.""" """Check if the package matcher is acceptable."""
if package_installer_name is None:
return False
else:
return all([ return all([
self.name_.match(package_installer_name), self.name_.match(package_installer_name),
self.target_system_ == target_system]) self.target_system_ == target_system
])
def update_progress(self, fullname, progress): def update_progress(self, fullname, progress):
"""Update progress.""" """Update progress."""

View File

@ -1,5 +1,5 @@
{ {
"name": "$host.name", "name": "$host.hostname",
"hostname": "$host.hostname", "hostname": "$host.hostname",
"profile": "$host.profile", "profile": "$host.profile",
"gateway": "$host.gateway", "gateway": "$host.gateway",

View File

@ -1,5 +1,5 @@
{ {
"name": "$host.name", "name": "$host.hostname",
"hostname": "$host.hostname", "hostname": "$host.hostname",
"profile": "$host.profile", "profile": "$host.profile",
"gateway": "$host.gateway", "gateway": "$host.gateway",