Exemplo n.º 1
0
	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
Exemplo n.º 2
0
	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)
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
	def __init__(self, config, source):
		ParameterAdapter.__init__(self, config, source)
		self._source_hash = source.getHash()
		self._resync_state = ParameterSource.EmptyResyncResult()
Exemplo n.º 5
0
	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