Revision fce5efd1

b/lib/rpc.py
240 240
    raise ec(*args) # pylint: disable=W0142
241 241

  
242 242

  
243
def _SsconfResolver(node_list,
243
def _SsconfResolver(node_list, _,
244 244
                    ssc=ssconf.SimpleStore,
245 245
                    nslookup_fn=netutils.Hostname.GetIP):
246 246
  """Return addresses for given node names.
......
277 277
    """
278 278
    self._addresses = addresses
279 279

  
280
  def __call__(self, hosts):
280
  def __call__(self, hosts, _):
281 281
    """Returns static addresses for hosts.
282 282

  
283 283
    """
......
304 304
  return (name, ip)
305 305

  
306 306

  
307
def _NodeConfigResolver(single_node_fn, all_nodes_fn, hosts):
307
def _NodeConfigResolver(single_node_fn, all_nodes_fn, hosts, _):
308 308
  """Calculate node addresses using configuration.
309 309

  
310 310
  """
......
391 391

  
392 392
    return results
393 393

  
394
  def __call__(self, hosts, procedure, body, read_timeout,
394
  def __call__(self, hosts, procedure, body, read_timeout, resolver_opts,
395 395
               _req_process_fn=http.client.ProcessRequests):
396 396
    """Makes an RPC request to a number of nodes.
397 397

  
......
409 409
      "Missing RPC read timeout for procedure '%s'" % procedure
410 410

  
411 411
    (results, requests) = \
412
      self._PrepareRequests(self._resolver(hosts), self._port, procedure,
413
                            body, read_timeout)
412
      self._PrepareRequests(self._resolver(hosts, resolver_opts), self._port,
413
                            procedure, body, read_timeout)
414 414

  
415 415
    _req_process_fn(requests.values(), lock_monitor_cb=self._lock_monitor_cb)
416 416

  
......
469 469
      pnbody = dict((n, serializer.DumpJson(prep_fn(n, enc_args)))
470 470
                    for n in node_list)
471 471

  
472
    result = self._proc(node_list, procedure, pnbody, read_timeout)
472
    result = self._proc(node_list, procedure, pnbody, read_timeout,
473
                        req_resolver_opts)
473 474

  
474 475
    if postproc_fn:
475 476
      return dict(map(lambda (key, value): (key, postproc_fn(value)),
b/test/ganeti.rpc_unittest.py
74 74
    http_proc = _FakeRequestProcessor(self._GetVersionResponse)
75 75
    proc = rpc._RpcProcessor(resolver, 24094)
76 76
    result = proc(["localhost"], "version", {"localhost": ""}, 60,
77
                  _req_process_fn=http_proc)
77
                  NotImplemented, _req_process_fn=http_proc)
78 78
    self.assertEqual(result.keys(), ["localhost"])
79 79
    lhresp = result["localhost"]
80 80
    self.assertFalse(lhresp.offline)
......
100 100
    proc = rpc._RpcProcessor(resolver, 19176)
101 101
    host = "node31856"
102 102
    body = {host: ""}
103
    result = proc([host], "version", body, 12356, _req_process_fn=http_proc)
103
    result = proc([host], "version", body, 12356, NotImplemented,
104
                  _req_process_fn=http_proc)
104 105
    self.assertEqual(result.keys(), [host])
105 106
    lhresp = result[host]
106 107
    self.assertFalse(lhresp.offline)
......
117 118
    proc = rpc._RpcProcessor(resolver, 30668)
118 119
    host = "n17296"
119 120
    body = {host: ""}
120
    result = proc([host], "version", body, 60, _req_process_fn=http_proc)
121
    result = proc([host], "version", body, 60, NotImplemented,
122
                  _req_process_fn=http_proc)
121 123
    self.assertEqual(result.keys(), [host])
122 124
    lhresp = result[host]
123 125
    self.assertTrue(lhresp.offline)
......
148 150
    resolver = rpc._StaticResolver(nodes)
149 151
    http_proc = _FakeRequestProcessor(self._GetMultiVersionResponse)
150 152
    proc = rpc._RpcProcessor(resolver, 23245)
151
    result = proc(nodes, "version", body, 60, _req_process_fn=http_proc,)
153
    result = proc(nodes, "version", body, 60, NotImplemented,
154
                  _req_process_fn=http_proc)
152 155
    self.assertEqual(sorted(result.keys()), sorted(nodes))
153 156

  
154 157
    for name in nodes:
......
177 180
                                             errinfo))
178 181
      host = "aef9ur4i.example.com"
179 182
      body = {host: ""}
180
      result = proc(body.keys(), "version", body, 60,
183
      result = proc(body.keys(), "version", body, 60, NotImplemented,
181 184
                    _req_process_fn=http_proc)
182 185
      self.assertEqual(result.keys(), [host])
183 186
      lhresp = result[host]
......
227 230
    http_proc = \
228 231
      _FakeRequestProcessor(compat.partial(self._GetHttpErrorResponse,
229 232
                                           httperrnodes, failnodes))
230
    result = proc(nodes, "vg_list", body, rpc._TMO_URGENT,
233
    result = proc(nodes, "vg_list", body, rpc._TMO_URGENT, NotImplemented,
231 234
                  _req_process_fn=http_proc)
232 235
    self.assertEqual(sorted(result.keys()), sorted(nodes))
233 236

  
......
272 275
      http_proc = _FakeRequestProcessor(fn)
273 276
      host = "oqo7lanhly.example.com"
274 277
      body = {host: ""}
275
      result = proc([host], "version", body, 60,
278
      result = proc([host], "version", body, 60, NotImplemented,
276 279
                    _req_process_fn=http_proc)
277 280
      self.assertEqual(result.keys(), [host])
278 281
      lhresp = result[host]
......
304 307
    proc = rpc._RpcProcessor(resolver, 18700)
305 308
    host = "node19759"
306 309
    body = {host: serializer.DumpJson(test_data)}
307
    result = proc([host], "upload_file", body, 30, _req_process_fn=http_proc)
310
    result = proc([host], "upload_file", body, 30, NotImplemented,
311
                  _req_process_fn=http_proc)
308 312
    self.assertEqual(result.keys(), [host])
309 313
    lhresp = result[host]
310 314
    self.assertFalse(lhresp.offline)
......
322 326
    node_list = ["node%d.example.com" % n for n in range(0, 255, 13)]
323 327
    node_addr_list = [" ".join(t) for t in zip(node_list, addr_list)]
324 328
    ssc = GetFakeSimpleStoreClass(lambda _: node_addr_list)
325
    result = rpc._SsconfResolver(node_list, ssc=ssc, nslookup_fn=NotImplemented)
329
    result = rpc._SsconfResolver(node_list, NotImplemented,
330
                                 ssc=ssc, nslookup_fn=NotImplemented)
326 331
    self.assertEqual(result, zip(node_list, addr_list))
327 332

  
328 333
  def testNsLookup(self):
......
331 336
    ssc = GetFakeSimpleStoreClass(lambda _: [])
332 337
    node_addr_map = dict(zip(node_list, addr_list))
333 338
    nslookup_fn = lambda name, family=None: node_addr_map.get(name)
334
    result = rpc._SsconfResolver(node_list, ssc=ssc, nslookup_fn=nslookup_fn)
339
    result = rpc._SsconfResolver(node_list, NotImplemented,
340
                                 ssc=ssc, nslookup_fn=nslookup_fn)
335 341
    self.assertEqual(result, zip(node_list, addr_list))
336 342

  
337 343
  def testBothLookups(self):
......
342 348
    ssc = GetFakeSimpleStoreClass(lambda _: node_addr_list)
343 349
    node_addr_map = dict(zip(node_list[:n], addr_list[:n]))
344 350
    nslookup_fn = lambda name, family=None: node_addr_map.get(name)
345
    result = rpc._SsconfResolver(node_list, ssc=ssc, nslookup_fn=nslookup_fn)
351
    result = rpc._SsconfResolver(node_list, NotImplemented,
352
                                 ssc=ssc, nslookup_fn=nslookup_fn)
346 353
    self.assertEqual(result, zip(node_list, addr_list))
347 354

  
348 355
  def testAddressLookupIPv6(self):
......
350 357
    node_list = ["node%d.example.com" % n for n in range(0, 255, 11)]
351 358
    node_addr_list = [" ".join(t) for t in zip(node_list, addr_list)]
352 359
    ssc = GetFakeSimpleStoreClass(lambda _: node_addr_list)
353
    result = rpc._SsconfResolver(node_list, ssc=ssc, nslookup_fn=NotImplemented)
360
    result = rpc._SsconfResolver(node_list, NotImplemented,
361
                                 ssc=ssc, nslookup_fn=NotImplemented)
354 362
    self.assertEqual(result, zip(node_list, addr_list))
355 363

  
356 364

  
......
359 367
    addresses = ["192.0.2.%d" % n for n in range(0, 123, 7)]
360 368
    nodes = ["node%s.example.com" % n for n in range(0, 123, 7)]
361 369
    res = rpc._StaticResolver(addresses)
362
    self.assertEqual(res(nodes), zip(nodes, addresses))
370
    self.assertEqual(res(nodes, NotImplemented), zip(nodes, addresses))
363 371

  
364 372
  def testWrongLength(self):
365 373
    res = rpc._StaticResolver([])
366
    self.assertRaises(AssertionError, res, ["abc"])
374
    self.assertRaises(AssertionError, res, ["abc"], NotImplemented)
367 375

  
368 376

  
369 377
class TestNodeConfigResolver(unittest.TestCase):
......
380 388
  def testSingleOnline(self):
381 389
    self.assertEqual(rpc._NodeConfigResolver(self._GetSingleOnlineNode,
382 390
                                             NotImplemented,
383
                                             ["node90.example.com"]),
391
                                             ["node90.example.com"], None),
384 392
                     [("node90.example.com", "192.0.2.90")])
385 393

  
386 394
  def testSingleOffline(self):
387 395
    self.assertEqual(rpc._NodeConfigResolver(self._GetSingleOfflineNode,
388 396
                                             NotImplemented,
389
                                             ["node100.example.com"]),
397
                                             ["node100.example.com"], None),
390 398
                     [("node100.example.com", rpc._OFFLINE)])
391 399

  
392 400
  def testUnknownSingleNode(self):
393 401
    self.assertEqual(rpc._NodeConfigResolver(lambda _: None, NotImplemented,
394
                                             ["node110.example.com"]),
402
                                             ["node110.example.com"], None),
395 403
                     [("node110.example.com", "node110.example.com")])
396 404

  
397 405
  def testMultiEmpty(self):
398 406
    self.assertEqual(rpc._NodeConfigResolver(NotImplemented,
399 407
                                             lambda: {},
400
                                             []),
408
                                             [], None),
401 409
                     [])
402 410

  
403 411
  def testMultiSomeOffline(self):
......
410 418
    # Resolve no names
411 419
    self.assertEqual(rpc._NodeConfigResolver(NotImplemented,
412 420
                                             lambda: nodes,
413
                                             []),
421
                                             [], None),
414 422
                     [])
415 423

  
416 424
    # Offline, online and unknown hosts
......
419 427
                                             ["node3.example.com",
420 428
                                              "node92.example.com",
421 429
                                              "node54.example.com",
422
                                              "unknown.example.com",]), [
430
                                              "unknown.example.com",],
431
                                             None), [
423 432
      ("node3.example.com", rpc._OFFLINE),
424 433
      ("node92.example.com", "192.0.2.92"),
425 434
      ("node54.example.com", rpc._OFFLINE),

Also available in: Unified diff