def resync(self, force = False): # Do not overwrite resync results - eg. from external or init trigger source_hash = self._source.getHash() if (self._resync_state == ParameterSource.EmptyResyncResult()) and ((source_hash != self._source_hash) or force): activity = Activity('Syncronizing parameter information') t_start = time.time() try: self._resync_state = self._resync() except Exception: raise ParameterError('Unable to resync parameters!') self._source_hash = self._source.getHash() activity.finish() self._log.log(logging.INFO, 'Finished resync of parameter source (%s)', strTimeShort(time.time() - t_start)) result = self._resync_state self._resync_state = ParameterSource.EmptyResyncResult() return result
def _resync(self): # This function is _VERY_ time critical! tmp = self._rawSource.resync() # First ask about psource changes (redoNewPNum, disableNewPNum, sizeChange) = (set(tmp[0]), set(tmp[1]), tmp[2]) hashNew = self._rawSource.getHash() hashChange = self._storedHash != hashNew self._storedHash = hashNew if not (redoNewPNum or disableNewPNum or sizeChange or hashChange): return ParameterSource.EmptyResyncResult() psource_old = ParameterAdapter(None, ParameterSource.createInstance('GCDumpParameterSource', self._pathParams)) psource_new = ParameterAdapter(None, self._rawSource) mapJob2PID = {} (pAdded, pMissing, _) = self._diffParams(psource_old, psource_new, mapJob2PID, redoNewPNum, disableNewPNum) self._source = self._getResyncSource(psource_old, psource_new, mapJob2PID, pAdded, pMissing, disableNewPNum) self._mapJob2PID = mapJob2PID # Update Job2PID map # Write resynced state self._writeJob2PID(self._pathJob2PID + '.tmp') ParameterSource.getClass('GCDumpParameterSource').write(self._pathParams + '.tmp', self) os.rename(self._pathJob2PID + '.tmp', self._pathJob2PID) os.rename(self._pathParams + '.tmp', self._pathParams) redoNewPNum = redoNewPNum.difference(disableNewPNum) if redoNewPNum or disableNewPNum: mapPID2Job = dict(ismap(utils.swap, self._mapJob2PID.items())) translate = lambda pNum: mapPID2Job.get(pNum, pNum) return (set(imap(translate, redoNewPNum)), set(imap(translate, disableNewPNum)), sizeChange) return (set(), set(), sizeChange)
def resync(self): (result_redo, result_disable, _) = ParameterSource.EmptyResyncResult() (psource_redo, psource_disable, psource_sizeChange) = self._psource.resync() self._pSpace = self.initPSpace() for pNum, pInfo in enumerate(self._pSpace): subNum, _ = pInfo # ignore lookupIndex if subNum in psource_redo: result_redo.add(pNum) if subNum in psource_disable: result_disable.add(pNum) return (result_redo, result_disable, psource_sizeChange)
def __init__(self, config, source): ParameterAdapter.__init__(self, config, source) self._source_hash = source.getHash() self._resync_state = ParameterSource.EmptyResyncResult()
def resync(self, force = False): result = ResyncParameterAdapter.resync(self, force) if result not in (None, ParameterSource.EmptyResyncResult()): self._activeMap = {} # invalidate cache on changes return result