Changes all uses of utcnow to use the version in utils. This is a simple wrapper for datetime.datetime.utcnow that allows us to use fake values for tests.
There are still a few places in the Zone code that is using datetime.now(), I'd prefer to move this to utils.utcnow() as well but I want to chat with sandy first to make sure that there won't be any issues.
This commit is contained in:
		| @@ -53,7 +53,6 @@ | ||||
|   CLI interface for nova management. | ||||
| """ | ||||
|  | ||||
| import datetime | ||||
| import gettext | ||||
| import glob | ||||
| import json | ||||
| @@ -690,7 +689,7 @@ class ServiceCommands(object): | ||||
|         """Show a list of all running services. Filter by host & service name. | ||||
|         args: [host] [service]""" | ||||
|         ctxt = context.get_admin_context() | ||||
|         now = datetime.datetime.utcnow() | ||||
|         now = utils.utcnow() | ||||
|         services = db.service_get_all(ctxt) | ||||
|         if host: | ||||
|             services = [s for s in services if s['host'] == host] | ||||
|   | ||||
| @@ -11,9 +11,8 @@ | ||||
| #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | ||||
| #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | ||||
| #    License for the specific language governing permissions and limitations | ||||
| #    under the License.import datetime | ||||
| #    under the License. | ||||
|  | ||||
| import datetime | ||||
| import uuid | ||||
|  | ||||
| from nova import flags | ||||
| @@ -64,7 +63,7 @@ def notify(publisher_id, event_type, priority, payload): | ||||
|  | ||||
|     {'message_id': str(uuid.uuid4()), | ||||
|      'publisher_id': 'compute.host1', | ||||
|      'timestamp': datetime.datetime.utcnow(), | ||||
|      'timestamp': utils.utcnow(), | ||||
|      'priority': 'WARN', | ||||
|      'event_type': 'compute.create_instance', | ||||
|      'payload': {'instance_id': 12, ... }} | ||||
| @@ -79,5 +78,5 @@ def notify(publisher_id, event_type, priority, payload): | ||||
|                    event_type=event_type, | ||||
|                    priority=priority, | ||||
|                    payload=payload, | ||||
|                    timestamp=str(datetime.datetime.utcnow())) | ||||
|                    timestamp=str(utils.utcnow())) | ||||
|     driver.notify(msg) | ||||
|   | ||||
| @@ -28,6 +28,7 @@ from nova import exception | ||||
| from nova import flags | ||||
| from nova import log as logging | ||||
| from nova import rpc | ||||
| from nova import utils | ||||
| from nova.compute import power_state | ||||
|  | ||||
| FLAGS = flags.FLAGS | ||||
| @@ -61,7 +62,7 @@ class Scheduler(object): | ||||
|         """Check whether a service is up based on last heartbeat.""" | ||||
|         last_heartbeat = service['updated_at'] or service['created_at'] | ||||
|         # Timestamps in DB are UTC. | ||||
|         elapsed = datetime.datetime.utcnow() - last_heartbeat | ||||
|         elapsed = utils.utcnow() - last_heartbeat | ||||
|         return elapsed < datetime.timedelta(seconds=FLAGS.service_down_time) | ||||
|  | ||||
|     def hosts_up(self, context, topic): | ||||
|   | ||||
| @@ -21,10 +21,9 @@ | ||||
| Simple Scheduler | ||||
| """ | ||||
|  | ||||
| import datetime | ||||
|  | ||||
| from nova import db | ||||
| from nova import flags | ||||
| from nova import utils | ||||
| from nova.scheduler import driver | ||||
| from nova.scheduler import chance | ||||
|  | ||||
| @@ -54,7 +53,7 @@ class SimpleScheduler(chance.ChanceScheduler): | ||||
|  | ||||
|             # TODO(vish): this probably belongs in the manager, if we | ||||
|             #             can generalize this somehow | ||||
|             now = datetime.datetime.utcnow() | ||||
|             now = utils.utcnow() | ||||
|             db.instance_update(context, instance_id, {'host': host, | ||||
|                                                       'scheduled_at': now}) | ||||
|             return host | ||||
| @@ -66,7 +65,7 @@ class SimpleScheduler(chance.ChanceScheduler): | ||||
|             if self.service_is_up(service): | ||||
|                 # NOTE(vish): this probably belongs in the manager, if we | ||||
|                 #             can generalize this somehow | ||||
|                 now = datetime.datetime.utcnow() | ||||
|                 now = utils.utcnow() | ||||
|                 db.instance_update(context, | ||||
|                                    instance_id, | ||||
|                                    {'host': service['host'], | ||||
| @@ -90,7 +89,7 @@ class SimpleScheduler(chance.ChanceScheduler): | ||||
|  | ||||
|             # TODO(vish): this probably belongs in the manager, if we | ||||
|             #             can generalize this somehow | ||||
|             now = datetime.datetime.utcnow() | ||||
|             now = utils.utcnow() | ||||
|             db.volume_update(context, volume_id, {'host': host, | ||||
|                                                   'scheduled_at': now}) | ||||
|             return host | ||||
| @@ -103,7 +102,7 @@ class SimpleScheduler(chance.ChanceScheduler): | ||||
|             if self.service_is_up(service): | ||||
|                 # NOTE(vish): this probably belongs in the manager, if we | ||||
|                 #             can generalize this somehow | ||||
|                 now = datetime.datetime.utcnow() | ||||
|                 now = utils.utcnow() | ||||
|                 db.volume_update(context, | ||||
|                                  volume_id, | ||||
|                                  {'host': service['host'], | ||||
|   | ||||
| @@ -17,16 +17,17 @@ | ||||
| ZoneManager oversees all communications with child Zones. | ||||
| """ | ||||
|  | ||||
| import datetime | ||||
| import novaclient | ||||
| import thread | ||||
| import traceback | ||||
|  | ||||
| from datetime import datetime | ||||
| from eventlet import greenpool | ||||
|  | ||||
| from nova import db | ||||
| from nova import flags | ||||
| from nova import log as logging | ||||
| from nova import utils | ||||
|  | ||||
| FLAGS = flags.FLAGS | ||||
| flags.DEFINE_integer('zone_db_check_interval', 60, | ||||
| @@ -42,7 +43,7 @@ class ZoneState(object): | ||||
|         self.name = None | ||||
|         self.capabilities = None | ||||
|         self.attempt = 0 | ||||
|         self.last_seen = datetime.min | ||||
|         self.last_seen = datetime.datetime.min | ||||
|         self.last_exception = None | ||||
|         self.last_exception_time = None | ||||
|  | ||||
| @@ -56,7 +57,7 @@ class ZoneState(object): | ||||
|     def update_metadata(self, zone_metadata): | ||||
|         """Update zone metadata after successful communications with | ||||
|            child zone.""" | ||||
|         self.last_seen = datetime.now() | ||||
|         self.last_seen = utils.utcnow() | ||||
|         self.attempt = 0 | ||||
|         self.name = zone_metadata.get("name", "n/a") | ||||
|         self.capabilities = ", ".join(["%s=%s" % (k, v) | ||||
| @@ -72,7 +73,7 @@ class ZoneState(object): | ||||
|         """Something went wrong. Check to see if zone should be | ||||
|            marked as offline.""" | ||||
|         self.last_exception = exception | ||||
|         self.last_exception_time = datetime.now() | ||||
|         self.last_exception_time = utils.utcnow() | ||||
|         api_url = self.api_url | ||||
|         logging.warning(_("'%(exception)s' error talking to " | ||||
|                           "zone %(api_url)s") % locals()) | ||||
| @@ -104,7 +105,7 @@ def _poll_zone(zone): | ||||
| class ZoneManager(object): | ||||
|     """Keeps the zone states updated.""" | ||||
|     def __init__(self): | ||||
|         self.last_zone_db_check = datetime.min | ||||
|         self.last_zone_db_check = datetime.datetime.min | ||||
|         self.zone_states = {}  # { <zone_id> : ZoneState } | ||||
|         self.service_states = {}  # { <host> : { <service> : { cap k : v }}} | ||||
|         self.green_pool = greenpool.GreenPool() | ||||
| @@ -158,10 +159,10 @@ class ZoneManager(object): | ||||
|  | ||||
|     def ping(self, context=None): | ||||
|         """Ping should be called periodically to update zone status.""" | ||||
|         diff = datetime.now() - self.last_zone_db_check | ||||
|         diff = utils.utcnow() - self.last_zone_db_check | ||||
|         if diff.seconds >= FLAGS.zone_db_check_interval: | ||||
|             logging.debug(_("Updating zone cache from db.")) | ||||
|             self.last_zone_db_check = datetime.now() | ||||
|             self.last_zone_db_check = utils.utcnow() | ||||
|             self._refresh_from_db(context) | ||||
|         self._poll_zones(context) | ||||
|  | ||||
|   | ||||
| @@ -23,7 +23,6 @@ inline callbacks. | ||||
|  | ||||
| """ | ||||
|  | ||||
| import datetime | ||||
| import functools | ||||
| import os | ||||
| import shutil | ||||
| @@ -37,6 +36,7 @@ from eventlet import greenthread | ||||
| from nova import fakerabbit | ||||
| from nova import flags | ||||
| from nova import rpc | ||||
| from nova import utils | ||||
| from nova import service | ||||
| from nova import wsgi | ||||
| from nova.virt import fake | ||||
| @@ -69,7 +69,7 @@ class TestCase(unittest.TestCase): | ||||
|         # NOTE(vish): We need a better method for creating fixtures for tests | ||||
|         #             now that we have some required db setup for the system | ||||
|         #             to work properly. | ||||
|         self.start = datetime.datetime.utcnow() | ||||
|         self.start = utils.utcnow() | ||||
|         shutil.copyfile(os.path.join(FLAGS.state_path, FLAGS.sqlite_clean_db), | ||||
|                         os.path.join(FLAGS.state_path, FLAGS.sqlite_db)) | ||||
|  | ||||
|   | ||||
| @@ -197,7 +197,7 @@ class ZoneSchedulerTestCase(test.TestCase): | ||||
|         service.topic = 'compute' | ||||
|         service.id = kwargs['id'] | ||||
|         service.availability_zone = kwargs['zone'] | ||||
|         service.created_at = datetime.datetime.utcnow() | ||||
|         service.created_at = utils.utcnow() | ||||
|         return service | ||||
|  | ||||
|     def test_with_two_zones(self): | ||||
| @@ -291,7 +291,7 @@ class SimpleDriverTestCase(test.TestCase): | ||||
|         dic['host'] = kwargs.get('host', 'dummy') | ||||
|         s_ref = db.service_create(self.context, dic) | ||||
|         if 'created_at' in kwargs.keys() or 'updated_at' in kwargs.keys(): | ||||
|             t = datetime.datetime.utcnow() - datetime.timedelta(0) | ||||
|             t = utils.utcnow() - datetime.timedelta(0) | ||||
|             dic['created_at'] = kwargs.get('created_at', t) | ||||
|             dic['updated_at'] = kwargs.get('updated_at', t) | ||||
|             db.service_update(self.context, s_ref['id'], dic) | ||||
| @@ -402,7 +402,7 @@ class SimpleDriverTestCase(test.TestCase): | ||||
|                                    FLAGS.compute_manager) | ||||
|         compute1.start() | ||||
|         s1 = db.service_get_by_args(self.context, 'host1', 'nova-compute') | ||||
|         now = datetime.datetime.utcnow() | ||||
|         now = utils.utcnow() | ||||
|         delta = datetime.timedelta(seconds=FLAGS.service_down_time * 2) | ||||
|         past = now - delta | ||||
|         db.service_update(self.context, s1['id'], {'updated_at': past}) | ||||
| @@ -543,7 +543,7 @@ class SimpleDriverTestCase(test.TestCase): | ||||
|     def test_wont_sechedule_if_specified_host_is_down(self): | ||||
|         compute1 = self.start_service('compute', host='host1') | ||||
|         s1 = db.service_get_by_args(self.context, 'host1', 'nova-compute') | ||||
|         now = datetime.datetime.utcnow() | ||||
|         now = utils.utcnow() | ||||
|         delta = datetime.timedelta(seconds=FLAGS.service_down_time * 2) | ||||
|         past = now - delta | ||||
|         db.service_update(self.context, s1['id'], {'updated_at': past}) | ||||
| @@ -693,7 +693,7 @@ class SimpleDriverTestCase(test.TestCase): | ||||
|         dic = {'instance_id': instance_id, 'size': 1} | ||||
|         v_ref = db.volume_create(self.context, {'instance_id': instance_id, | ||||
|                                                 'size': 1}) | ||||
|         t1 = datetime.datetime.utcnow() - datetime.timedelta(1) | ||||
|         t1 = utils.utcnow() - datetime.timedelta(1) | ||||
|         dic = {'created_at': t1, 'updated_at': t1, 'binary': 'nova-volume', | ||||
|                'topic': 'volume', 'report_count': 0} | ||||
|         s_ref = db.service_create(self.context, dic) | ||||
| @@ -710,7 +710,7 @@ class SimpleDriverTestCase(test.TestCase): | ||||
|         """Confirms src-compute node is alive.""" | ||||
|         instance_id = self._create_instance() | ||||
|         i_ref = db.instance_get(self.context, instance_id) | ||||
|         t = datetime.datetime.utcnow() - datetime.timedelta(10) | ||||
|         t = utils.utcnow() - datetime.timedelta(10) | ||||
|         s_ref = self._create_compute_service(created_at=t, updated_at=t, | ||||
|                                              host=i_ref['host']) | ||||
|  | ||||
| @@ -738,7 +738,7 @@ class SimpleDriverTestCase(test.TestCase): | ||||
|         """Confirms exception raises in case dest host does not exist.""" | ||||
|         instance_id = self._create_instance() | ||||
|         i_ref = db.instance_get(self.context, instance_id) | ||||
|         t = datetime.datetime.utcnow() - datetime.timedelta(10) | ||||
|         t = utils.utcnow() - datetime.timedelta(10) | ||||
|         s_ref = self._create_compute_service(created_at=t, updated_at=t, | ||||
|                                              host=i_ref['host']) | ||||
|  | ||||
| @@ -797,7 +797,7 @@ class SimpleDriverTestCase(test.TestCase): | ||||
|         # mocks for live_migration_common_check() | ||||
|         instance_id = self._create_instance() | ||||
|         i_ref = db.instance_get(self.context, instance_id) | ||||
|         t1 = datetime.datetime.utcnow() - datetime.timedelta(10) | ||||
|         t1 = utils.utcnow() - datetime.timedelta(10) | ||||
|         s_ref = self._create_compute_service(created_at=t1, updated_at=t1, | ||||
|                                              host=dest) | ||||
|  | ||||
|   | ||||
| @@ -19,7 +19,6 @@ | ||||
| Tests For Compute | ||||
| """ | ||||
|  | ||||
| import datetime | ||||
| import mox | ||||
| import stubout | ||||
|  | ||||
| @@ -217,12 +216,12 @@ class ComputeTestCase(test.TestCase): | ||||
|         instance_ref = db.instance_get(self.context, instance_id) | ||||
|         self.assertEqual(instance_ref['launched_at'], None) | ||||
|         self.assertEqual(instance_ref['deleted_at'], None) | ||||
|         launch = datetime.datetime.utcnow() | ||||
|         launch = utils.utcnow() | ||||
|         self.compute.run_instance(self.context, instance_id) | ||||
|         instance_ref = db.instance_get(self.context, instance_id) | ||||
|         self.assert_(instance_ref['launched_at'] > launch) | ||||
|         self.assertEqual(instance_ref['deleted_at'], None) | ||||
|         terminate = datetime.datetime.utcnow() | ||||
|         terminate = utils.utcnow() | ||||
|         self.compute.terminate_instance(self.context, instance_id) | ||||
|         self.context = self.context.elevated(True) | ||||
|         instance_ref = db.instance_get(self.context, instance_id) | ||||
|   | ||||
| @@ -20,8 +20,6 @@ | ||||
| Tests For Console proxy. | ||||
| """ | ||||
|  | ||||
| import datetime | ||||
|  | ||||
| from nova import context | ||||
| from nova import db | ||||
| from nova import exception | ||||
|   | ||||
| @@ -16,7 +16,6 @@ | ||||
| #    License for the specific language governing permissions and limitations | ||||
| #    under the License. | ||||
|  | ||||
| import datetime | ||||
| import webob | ||||
| import webob.dec | ||||
| import webob.exc | ||||
|   | ||||
| @@ -307,7 +307,7 @@ def  get_my_linklocal(interface): | ||||
|  | ||||
|  | ||||
| def utcnow(): | ||||
|     """Overridable version of datetime.datetime.utcnow.""" | ||||
|     """Overridable version of utils.utcnow.""" | ||||
|     if utcnow.override_time: | ||||
|         return utcnow.override_time | ||||
|     return datetime.datetime.utcnow() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Vishvananda Ishaya
					Vishvananda Ishaya