From 252844879d9e34c81b1777a92ad4407fab4a6853 Mon Sep 17 00:00:00 2001
From: Andy Smith <ansmith@redhat.com>
Date: Mon, 3 Dec 2018 10:21:54 -0500
Subject: [PATCH] Don't use monotonic with Python >=3.3

A change to the global-requirements has limited use of monotonic
library to Python versions earlier than 3.3 (later versions have
built-in support for a monotonic clock), so limit it in
requirements.txt.

Note: this patch updates kafka driver (due to deprecated exception
in library) in order to pass unit tests

Change-Id: Id6b0814e05a0e548a8c2a5359daf1a6878cf6859
---
 oslo_messaging/_drivers/amqp1_driver/controller.py | 7 ++++++-
 oslo_messaging/_drivers/amqp1_driver/eventloop.py  | 7 ++++++-
 oslo_messaging/_drivers/impl_kafka.py              | 4 ++--
 requirements.txt                                   | 2 +-
 4 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/oslo_messaging/_drivers/amqp1_driver/controller.py b/oslo_messaging/_drivers/amqp1_driver/controller.py
index e801dd561..634ea021f 100644
--- a/oslo_messaging/_drivers/amqp1_driver/controller.py
+++ b/oslo_messaging/_drivers/amqp1_driver/controller.py
@@ -27,14 +27,19 @@ functions scheduled by the Controller.
 import abc
 import collections
 import logging
-from monotonic import monotonic as now  # noqa
 import os
 import platform
 import random
 import sys
 import threading
+import time
 import uuid
 
+if hasattr(time, 'monotonic'):
+    now = time.monotonic
+else:
+    from monotonic import monotonic as now  # noqa
+
 import proton
 import pyngus
 from six import iteritems
diff --git a/oslo_messaging/_drivers/amqp1_driver/eventloop.py b/oslo_messaging/_drivers/amqp1_driver/eventloop.py
index dda40a1ff..a5c68ce93 100644
--- a/oslo_messaging/_drivers/amqp1_driver/eventloop.py
+++ b/oslo_messaging/_drivers/amqp1_driver/eventloop.py
@@ -27,13 +27,18 @@ import errno
 import heapq
 import logging
 import math
-from monotonic import monotonic as now  # noqa
 import os
 import select
 import socket
 import threading
+import time
 import uuid
 
+if hasattr(time, 'monotonic'):
+    now = time.monotonic
+else:
+    from monotonic import monotonic as now  # noqa
+
 import pyngus
 
 from oslo_messaging._i18n import _LE, _LI, _LW
diff --git a/oslo_messaging/_drivers/impl_kafka.py b/oslo_messaging/_drivers/impl_kafka.py
index a69ffe6b6..20b97ca77 100644
--- a/oslo_messaging/_drivers/impl_kafka.py
+++ b/oslo_messaging/_drivers/impl_kafka.py
@@ -173,7 +173,7 @@ class ConsumerConnection(Connection):
         if not messages:
             # NOTE(sileht): really ? you return payload but no messages...
             # simulate timeout to consume message again
-            raise kafka.errors.ConsumerTimeout()
+            raise kafka.errors.ConsumerNoMoreData()
 
         if not self.enable_auto_commit:
             self.consumer.commit()
@@ -200,7 +200,7 @@ class ConsumerConnection(Connection):
                 return
             try:
                 return self._poll_messages(poll_timeout)
-            except kafka.errors.ConsumerTimeout as exc:
+            except kafka.errors.ConsumerNoMoreData as exc:
                 poll_timeout = timer.check_return(
                     _raise_timeout, exc, maximum=self.consumer_timeout)
             except Exception:
diff --git a/requirements.txt b/requirements.txt
index 0d0353b11..4eb7e33e8 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -13,7 +13,7 @@ oslo.service!=1.28.1,>=1.24.0 # Apache-2.0
 oslo.i18n>=3.15.3 # Apache-2.0
 stevedore>=1.20.0 # Apache-2.0
 debtcollector>=1.2.0 # Apache-2.0
-monotonic>=0.6 # Apache-2.0
+monotonic>=0.6;python_version<'3.3' # Apache-2.0
 
 # for jsonutils
 six>=1.10.0 # MIT