Repository: qpid-dispatch
Updated Branches:
  refs/heads/master 4bd79a3d5 -> 63a56d605


DISPATCH-990: Reorder config steps to init policy

Policy manager needs some setup before vhosts are processed.


Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/10ad8cf3
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/10ad8cf3
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/10ad8cf3

Branch: refs/heads/master
Commit: 10ad8cf370412ec424f92e1a3db0aee031f4afc4
Parents: 862b021
Author: Chuck Rolke <[email protected]>
Authored: Thu May 10 10:17:21 2018 -0400
Committer: Chuck Rolke <[email protected]>
Committed: Thu May 10 10:39:47 2018 -0400

----------------------------------------------------------------------
 python/qpid_dispatch_internal/management/config.py | 17 +++++++++++------
 .../qpid_dispatch_internal/policy/policy_local.py  |  5 +++++
 .../policy/policy_manager.py                       |  8 ++++++++
 src/policy.c                                       |  2 ++
 4 files changed, 26 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/10ad8cf3/python/qpid_dispatch_internal/management/config.py
----------------------------------------------------------------------
diff --git a/python/qpid_dispatch_internal/management/config.py 
b/python/qpid_dispatch_internal/management/config.py
index 303609e..aad6bd2 100644
--- a/python/qpid_dispatch_internal/management/config.py
+++ b/python/qpid_dispatch_internal/management/config.py
@@ -174,13 +174,21 @@ def configure_dispatch(dispatch, lib_handle, filename):
     from qpid_dispatch_internal.display_name.display_name import 
DisplayNameService
     displayname_service = DisplayNameService()
     qd.qd_dispatch_register_display_name_service(dispatch, displayname_service)
-    policyDir = config.by_type('policy')[0]['policyDir']
-    policyDefaultVhost = config.by_type('policy')[0]['defaultVhost']
+
+    # Configure policy and policy manager before vhosts
+    policyDir           = config.by_type('policy')[0]['policyDir']
+    policyDefaultVhost  = config.by_type('policy')[0]['defaultVhost']
+    useHostnamePatterns = config.by_type('policy')[0]['useVhostNamePatterns']
+    for a in config.by_type("policy"):
+        configure(a)
+    agent.policy.set_default_vhost(policyDefaultVhost)
+    agent.policy.set_use_hostname_patterns(useHostnamePatterns)
+
     # Remaining configuration
     for t in "sslProfile", "authServicePlugin", "listener", "connector", \
              "router.config.address", "router.config.linkRoute", 
"router.config.autoLink", \
              "router.config.exchange", "router.config.binding", \
-             "policy", "vhost":
+             "vhost":
         for a in config.by_type(t):
             configure(a)
             if t == "sslProfile":
@@ -201,6 +209,3 @@ def configure_dispatch(dispatch, lib_handle, filename):
                 pconfig = PolicyConfig(os.path.join(apath, i))
                 for a in pconfig.by_type("vhost"):
                     agent.configure(a)
-
-    # Set policy default application after all rulesets loaded
-    agent.policy.set_default_vhost(policyDefaultVhost)

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/10ad8cf3/python/qpid_dispatch_internal/policy/policy_local.py
----------------------------------------------------------------------
diff --git a/python/qpid_dispatch_internal/policy/policy_local.py 
b/python/qpid_dispatch_internal/policy/policy_local.py
index b482b7f..bee0499 100644
--- a/python/qpid_dispatch_internal/policy/policy_local.py
+++ b/python/qpid_dispatch_internal/policy/policy_local.py
@@ -508,6 +508,11 @@ class PolicyLocal(object):
         #  open.hostname is not found in the rulesetdb
         self._default_vhost = ""
 
+        # _use_hostname_patterns
+        #  holds policy setting.
+        #  When true policy ruleset definitions are propagated to C code
+        self.use_hostname_patterns = False
+
     #
     # Service interfaces
     #

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/10ad8cf3/python/qpid_dispatch_internal/policy/policy_manager.py
----------------------------------------------------------------------
diff --git a/python/qpid_dispatch_internal/policy/policy_manager.py 
b/python/qpid_dispatch_internal/policy/policy_manager.py
index 34deabb..0437fdd 100644
--- a/python/qpid_dispatch_internal/policy/policy_manager.py
+++ b/python/qpid_dispatch_internal/policy/policy_manager.py
@@ -43,6 +43,7 @@ class PolicyManager(object):
         self._agent = agent
         self._policy_local = PolicyLocal(self)
         self.log_adapter = LogAdapter("POLICY")
+        self._use_hostname_patterns = False
 
     def log(self, level, text):
         info = traceback.extract_stack(limit=2)[0] # Caller frame info
@@ -70,6 +71,13 @@ class PolicyManager(object):
     def get_agent(self):
         return self._agent
 
+    def get_use_hostname_patterns(self):
+        return self._use_hostname_patterns
+
+    def set_use_hostname_patterns(self, v):
+        self._use_hostname_patterns = v
+        self._policy_local.use_hostname_patterns = v
+
     #
     # Management interface to create a ruleset
     #

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/10ad8cf3/src/policy.c
----------------------------------------------------------------------
diff --git a/src/policy.c b/src/policy.c
index 7de111c..e982077 100644
--- a/src/policy.c
+++ b/src/policy.c
@@ -61,6 +61,7 @@ struct qd_policy_t {
     qd_dispatch_t        *qd;
     qd_log_source_t      *log_source;
     void                 *py_policy_manager;
+    sys_mutex_t          *tree_lock;
     qd_parse_tree_t      *hostname_tree;
                           // configured settings
     int                   max_connection_limit;
@@ -83,6 +84,7 @@ qd_policy_t *qd_policy(qd_dispatch_t *qd)
     policy->qd                   = qd;
     policy->log_source           = qd_log_source("POLICY");
     policy->max_connection_limit = 65535;
+    policy->tree_lock            = sys_mutex();
     policy->hostname_tree        = qd_parse_tree_new(QD_PARSE_TREE_ADDRESS);
 
     qd_log(policy->log_source, QD_LOG_TRACE, "Policy Initialized");


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to