Skip to content

Commit 44e5941

Browse files
committed
PDG: workItemResultServerAddr() return IP:port, not localhostname:port
On farm artist machine can be not reachable by name. References: #514.
1 parent d3cc714 commit 44e5941

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

plugins/houdini/pdg/types/afanasyscheduler.py

+29-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1+
"""
2+
To reload scheduler type:
3+
import pdg; pdg.TypeRegistry.types().registeredType(pdg.registeredType.Scheduler, "afanasyscheduler").reload()
4+
"""
15
import json
26
import logging
37
import os
8+
import socket
49
import sys
510
import traceback
611

@@ -16,7 +21,6 @@
1621
logging.basicConfig(level = logging.DEBUG)
1722
logger = logging.getLogger(__name__)
1823

19-
2024
class AfanasyScheduler(CallbackServerMixin, PyScheduler):
2125
"""
2226
Scheduler implementation that interfaces with a Afanasy farm instance.
@@ -44,6 +48,7 @@ def _initData(self):
4448
self.job_id = None
4549
self.job_block_name_id = {}
4650
self.job_tasks_id_name = {}
51+
self._local_addr = self._getLocalAddr()
4752

4853

4954
def _constructJob(self):
@@ -109,6 +114,29 @@ def _deleteJob(self):
109114
self._initData()
110115

111116

117+
def _getLocalAddr(self):
118+
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
119+
try:
120+
# doesn't even have to be reachable
121+
s.connect(('10.255.255.255', 1))
122+
addr = s.getsockname()[0]
123+
except Exception:
124+
addr = socket.gethostbyname(socket.gethostname())
125+
finally:
126+
s.close()
127+
""" Solution from:
128+
https://stackoverflow.com/questions/166506/finding-local-ip-addresses-using-pythons-stdlib?page=1&tab=votes#tab-top
129+
"""
130+
print(addr)
131+
return addr
132+
133+
def workItemResultServerAddr(self):
134+
# By default it uses local host name.
135+
# On farm better to use direct IP address.
136+
addr, port = self._workItemResultServerAddr.split(':')
137+
addr = ':'.join([self._local_addr, port])
138+
return addr
139+
112140
def applicationBin(self, i_app, i_work_item):
113141
"""
114142
[virtual] Returns the path to the given application

0 commit comments

Comments
 (0)