~evarlast/charms/trusty/mongodb/trunk

« back to all changes in this revision

Viewing changes to hooks/hooks.py

  • Committer: Juan L. Negron
  • Date: 2014-03-06 07:55:30 UTC
  • Revision ID: juan@ubuntu.com-20140306075530-oey84i6ywoy4h0gx
Fixed mongos relation error. The code now evaluates and handles empty relation data.

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
from textwrap import dedent
25
25
from yaml.constructor import ConstructorError
26
26
 
 
27
 
 
28
###############################################################################
 
29
# Global variables
 
30
###############################################################################
 
31
default_mongodb_config = "/etc/mongodb.conf"
 
32
default_mongodb_init_config = "/etc/init/mongodb.conf"
 
33
default_mongos_list = "/etc/mongos.list"
 
34
default_wait_for = 20
 
35
default_max_tries = 20
 
36
 
27
37
###############################################################################
28
38
# Supporting functions
29
39
###############################################################################
110
120
#                              to the specified unit
111
121
#                relation_id:  specify relation id for out of context usage.
112
122
#------------------------------------------------------------------------------
113
 
def relation_get(scope=None, unit_name=None, relation_id=None):
 
123
def relation_get(scope=None, unit_name=None, relation_id=None,
 
124
        wait_for=default_wait_for, max_tries=default_max_tries):
114
125
    juju_log("relation_get: scope: %s, unit_name: %s, relation_id: %s" %
115
126
    (scope, unit_name, relation_id))
 
127
    current_try = 0
116
128
    try:
117
129
        relation_cmd_line = ['relation-get', '--format=json']
118
130
        if relation_id is not None:
124
136
        if unit_name is not None:
125
137
            relation_cmd_line.append(unit_name)
126
138
        relation_data = json.loads(subprocess.check_output(relation_cmd_line))
 
139
 
 
140
#        while relation_data is None and current_try < max_tries:
 
141
#            time.sleep(wait_for)
 
142
#            relation_data = json.loads(subprocess.check_output(relation_cmd_line))
 
143
#            current_try += 1
 
144
 
127
145
    except Exception, e:
128
146
        juju_log(str(e))
129
147
        relation_data = None
162
180
        return(retVal)
163
181
 
164
182
 
165
 
def relation_list(relation_id=None):
 
183
def relation_list(relation_id=None, wait_for=default_wait_for,
 
184
        max_tries=default_max_tries):
166
185
    juju_log("relation_list: relation_id: %s" % relation_id)
 
186
    current_try = 0
167
187
    try:
168
188
        relation_cmd_line = ['relation-list', '--format=json']
169
189
        if relation_id is not None:
170
190
            relation_cmd_line.append('-r %s' % relation_id)
171
191
        relation_data = json.loads(subprocess.check_output(relation_cmd_line))
 
192
 
 
193
#        while relation_data is None and current_try < max_tries:
 
194
#            time.sleep(wait_for)
 
195
#            relation_data = json.loads(subprocess.check_output(relation_cmd_line))
 
196
#            current_try += 1
 
197
 
172
198
    except Exception, e:
173
199
        juju_log(str(e))
174
200
        relation_data = None
320
346
        return((None, None))
321
347
 
322
348
 
323
 
###############################################################################
324
 
# Global variables
325
 
###############################################################################
326
 
default_mongodb_config = "/etc/mongodb.conf"
327
 
default_mongodb_init_config = "/etc/init/mongodb.conf"
328
 
default_mongos_list = "/etc/mongos.list"
329
 
default_wait_for = 20
330
 
default_max_tries = 20
331
349
 
332
350
 
333
351
###############################################################################
795
813
            cmd_line += ' --configdb %s' % ','.join(config_servers[0:3])
796
814
#        else:
797
815
#            cmd_line += ' --configdb %s' % config_servers[0]
 
816
    juju_log("enable_mongos: cmd_line: %s" % cmd_line)
798
817
    subprocess.call(cmd_line, shell=True)
799
818
    retVal = mongos_ready(wait_for, max_tries)
800
819
    if retVal:
1194
1213
        hostname = relation_get('hostname', member)
1195
1214
        port = relation_get('port', member)
1196
1215
        rel_type = relation_get('type', member)
 
1216
        if hostname is None or port is None or rel_type is None:
 
1217
            juju_log("mongos_relation_changed: relation data not ready.")
 
1218
            break
1197
1219
        if rel_type == 'configsvr':
1198
1220
            config_servers = load_config_servers(default_mongos_list)
1199
1221
            print "Adding config server: %s:%s" % (hostname, port)