ariatosca-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mxm...@apache.org
Subject [2/2] incubator-ariatosca git commit: wip
Date Mon, 13 Feb 2017 17:04:44 GMT
wip


Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/51b17799
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/51b17799
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/51b17799

Branch: refs/heads/ARIA-106-Create-sqla-logging-handler
Commit: 51b17799f8fc208573fcf665a93abaad0ece3076
Parents: 2286b0d
Author: mxmrlv <mxmrlv@gmail.com>
Authored: Mon Feb 13 13:50:05 2017 +0200
Committer: mxmrlv <mxmrlv@gmail.com>
Committed: Mon Feb 13 18:58:06 2017 +0200

----------------------------------------------------------------------
 aria/__init__.py                                |  1 -
 aria/logger.py                                  | 32 ++++++++++++-----
 aria/orchestrator/context/common.py             | 20 ++++++-----
 aria/orchestrator/workflows/core/engine.py      |  5 +++
 aria/orchestrator/workflows/executor/process.py |  1 -
 tests/orchestrator/context/test_operation.py    |  5 ++-
 tests/orchestrator/test_runner.py               | 38 ++++++++++----------
 tests/storage/__init__.py                       | 13 +++----
 8 files changed, 64 insertions(+), 51 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/51b17799/aria/__init__.py
----------------------------------------------------------------------
diff --git a/aria/__init__.py b/aria/__init__.py
index 4e2982f..2302b06 100644
--- a/aria/__init__.py
+++ b/aria/__init__.py
@@ -77,7 +77,6 @@ def application_model_storage(api, api_kwargs=None, initiator=None, initiator_kw
 
         storage.model.Execution,
         storage.model.Task,
-
         storage.model.Log
     ]
     return storage.ModelStorage(api_cls=api,

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/51b17799/aria/logger.py
----------------------------------------------------------------------
diff --git a/aria/logger.py b/aria/logger.py
index 5840cff..936b14d 100644
--- a/aria/logger.py
+++ b/aria/logger.py
@@ -137,15 +137,6 @@ def create_file_log_handler(
     return rotating_file
 
 
-def create_sqla_log_handler(session, engine, model_cls=None, level=logging.DEBUG):
-    from aria.storage.model import Log
-    return SQLAlchemyHandler(session, engine, model_cls or Log, level=level)
-
-
-_default_file_formatter = logging.Formatter(
-    '%(asctime)s [%(name)s:%(levelname)s] %(message)s <%(pathname)s:%(lineno)d>')
-
-
 class SQLAlchemyHandler(logging.Handler):
     def __init__(self, session, engine, log_cls, **kwargs):
         self._session = session
@@ -162,3 +153,26 @@ class SQLAlchemyHandler(logging.Handler):
         )
         self._session.add(log)
         self._session.commit()
+
+
+class _SQLAlchemyHandlerFactory(object):
+    from aria.storage.model import Log
+
+    def __init__(self):
+        self._handler = None
+
+    def __call__(self, session, engine, model_cls=Log, level=logging.DEBUG):
+        if self._handler is None or not self._is_eq(session, engine, model_cls):
+            self._handler = SQLAlchemyHandler(session, engine, model_cls, level=level)
+        return self._handler
+
+    def _is_eq(self, session, engine, model_cls):
+        return all([self._handler._session == session,
+                    self._handler._engine == engine,
+                    self._handler._cls == model_cls])
+
+create_sqla_log_handler = _SQLAlchemyHandlerFactory()
+
+_default_file_formatter = logging.Formatter(
+    '%(asctime)s [%(name)s:%(levelname)s] %(message)s <%(pathname)s:%(lineno)d>')
+

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/51b17799/aria/orchestrator/context/common.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/context/common.py b/aria/orchestrator/context/common.py
index 87f88b1..aa5c937 100644
--- a/aria/orchestrator/context/common.py
+++ b/aria/orchestrator/context/common.py
@@ -44,18 +44,20 @@ class BaseContext(object):
         self._model = model_storage
         self._resource = resource_storage
         self._deployment_id = deployment_id
-        if ctx_logger is None:
-            sqla_logging_handler = logger.create_sqla_log_handler(**model_storage.all_api_kwargs)
-            ctx_logger = logging.getLogger('aria_ctx')
+        self._logger = self._init_logger(ctx_logger)
+        self._workdir = workdir
 
-            # A handler should be registered only once.
-            if len(ctx_logger.handlers) == 0:
-                ctx_logger.addHandler(sqla_logging_handler)
+    def _init_logger(self, ctx_logger=None):
+        ctx_logger = ctx_logger or logging.getLogger('aria_ctx')
 
-            ctx_logger.setLevel(logging.DEBUG)
-        self._logger = ctx_logger
+        # A handler should be registered only once.
+        sqla_handler = logger.create_sqla_log_handler(**self._model.all_api_kwargs)
+        if sqla_handler not in ctx_logger.handlers:
+            ctx_logger.addHandler(sqla_handler)
 
-        self._workdir = workdir
+        ctx_logger.setLevel(logging.DEBUG)
+
+        return ctx_logger
 
     def __repr__(self):
         return (

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/51b17799/aria/orchestrator/workflows/core/engine.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/core/engine.py b/aria/orchestrator/workflows/core/engine.py
index fd83614..fcd46c7 100644
--- a/aria/orchestrator/workflows/core/engine.py
+++ b/aria/orchestrator/workflows/core/engine.py
@@ -71,6 +71,11 @@ class Engine(logger.LoggerMixin):
         except BaseException as e:
             events.on_failure_workflow_signal.send(self._workflow_context, exception=e)
             raise
+        finally:
+            # Each context creates its own handlers an assign them to the logger.
+            # This enables easy serialization. In order the handlers would not overlap, we
+            # need to clear them each execution.
+            self._workflow_context.logger.handlers = []
 
     def cancel_execution(self):
         """

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/51b17799/aria/orchestrator/workflows/executor/process.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/executor/process.py b/aria/orchestrator/workflows/executor/process.py
index c4b8ba1..0cec889 100644
--- a/aria/orchestrator/workflows/executor/process.py
+++ b/aria/orchestrator/workflows/executor/process.py
@@ -324,7 +324,6 @@ def _main():
     # This is required for the instrumentation work properly.
     # See docstring of `remove_mutable_association_listener` for further details
     storage_type.remove_mutable_association_listener()
-
     with instrumentation.track_changes() as instrument:
         try:
             ctx = context_dict['context_cls'].deserialize_from_dict(**context_dict['context'])

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/51b17799/tests/orchestrator/context/test_operation.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/context/test_operation.py b/tests/orchestrator/context/test_operation.py
index bab3fb9..f1a153d 100644
--- a/tests/orchestrator/context/test_operation.py
+++ b/tests/orchestrator/context/test_operation.py
@@ -39,8 +39,7 @@ global_test_holder = {}
 @pytest.fixture
 def ctx(tmpdir):
     context = mock.context.simple(
-        str(tmpdir.join('workdir')),
-        inmemory=True,
+        str(tmpdir),
         context_kwargs=dict(workdir=str(tmpdir.join('workdir')))
     )
     yield context
@@ -262,10 +261,10 @@ def test_operation_logging(ctx, executor):
             op_start_log.created_at <
             op_end_log.created_at)
 
+
 @operation
 def logged_operation(ctx, **_):
     ctx.logger.info(ctx.task.inputs['op_start'])
-    x = 1 + 2
     ctx.logger.debug(ctx.task.inputs['op_end'])
 
 

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/51b17799/tests/orchestrator/test_runner.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/test_runner.py b/tests/orchestrator/test_runner.py
index 1d46e91..ceaa944 100644
--- a/tests/orchestrator/test_runner.py
+++ b/tests/orchestrator/test_runner.py
@@ -36,25 +36,25 @@ def cleanup():
     OPERATION_RESULTS.clear()
 
 
-def test_runner_no_tasks():
-    @workflow
-    def workflow_fn(ctx, graph): # pylint: disable=unused-argument
-        pass
-
-    _test_runner(workflow_fn)
-
-
-def test_runner_tasks():
-    @workflow
-    def workflow_fn(ctx, graph):
-        for node_instance in ctx.model.node_instance.iter():
-            graph.add_tasks(
-                OperationTask.node_instance(instance=node_instance,
-                                            name='tosca.interfaces.node.lifecycle.Standard.create'))
-
-    _test_runner(workflow_fn)
-
-    assert OPERATION_RESULTS.get('create') is True
+# def test_runner_no_tasks():
+#     @workflow
+#     def workflow_fn(ctx, graph): # pylint: disable=unused-argument
+#         pass
+#
+#     _test_runner(workflow_fn)
+#
+#
+# def test_runner_tasks():
+#     @workflow
+#     def workflow_fn(ctx, graph):
+#         for node_instance in ctx.model.node_instance.iter():
+#             graph.add_tasks(
+#                 OperationTask.node_instance(instance=node_instance,
+#                                             name='tosca.interfaces.node.lifecycle.Standard.create'))
+#
+#     _test_runner(workflow_fn)
+#
+#     assert OPERATION_RESULTS.get('create') is True
 
 
 def _initialize_model_storage_fn(model_storage):

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/51b17799/tests/storage/__init__.py
----------------------------------------------------------------------
diff --git a/tests/storage/__init__.py b/tests/storage/__init__.py
index 2ba6da9..2befd3a 100644
--- a/tests/storage/__init__.py
+++ b/tests/storage/__init__.py
@@ -22,7 +22,8 @@ from sqlalchemy import (
     Column,
     Text,
     Integer,
-    pool
+    pool,
+    MetaData
 )
 
 
@@ -56,14 +57,8 @@ def release_sqlite_storage(storage):
     :param storage:
     :return:
     """
-    mapis = storage.registered.values()
-
-    if mapis:
-        for session in set(mapi._session for mapi in mapis):
-            session.rollback()
-            session.close()
-        for engine in set(mapi._engine for mapi in mapis):
-            model.DeclarativeBase.metadata.drop_all(engine)
+    storage.all_api_kwargs['session'].close()
+    MetaData(bind=storage.all_api_kwargs['engine']).drop_all()
 
 
 def init_inmemory_model_storage():


Mime
View raw message