Exemple #1
0
 def _FlushToDisk(self):
     if self.readOnly or not self.filename:
         return
     s = self._GetSaveStr()
     try:
         blue.AtomicFileWrite(self.filename, s)
     except Exception:
         L.error('Failed writing %s, switching to read-only', self.filename)
         self.readOnly = True
Exemple #2
0
 def _WriterThreadFunc(self):
     if self._dirty:
         self._dirty = False
         fn = blue.paths.ResolvePathForWriting(self._filepath)
         try:
             if os.access(fn, os.F_OK) and not os.access(fn, os.W_OK):
                 os.chmod(fn, 438)
             k = yaml.dump(self.datastore, Dumper=yaml.CSafeDumper)
             blue.AtomicFileWrite(fn, k)
         except Exception as e:
             log.LogError('Failed writing to disk', str(self), '-', repr(e))
Exemple #3
0
 def WriteToDisk(self):
     if self._dirty:
         self._dirty = False
         fn = blue.paths.ResolvePathForWriting(self._filepath)
         try:
             if os.access(fn, os.F_OK) and not os.access(fn, os.W_OK):
                 os.chmod(fn, 438)
             k = blue.marshal.Save(self.datastore)
             blue.AtomicFileWrite(fn, k)
         except Exception as e:
             log.LogError('Failed writing to disk', str(self), '-', repr(e))
Exemple #4
0
    def __FlushCache(self, yieldFirst):
        if yieldFirst:
            blue.pyos.synchro.Yield()
        while self.lastChange:
            flushWhat, lastChange = self.lastChange.items()[0]
            del self.lastChange[flushWhat]
            what, key = flushWhat
            filename = self.cachePath + what + '/%s.cache' % self.KeyToFileName(
                key)
            if os.access(filename,
                         os.F_OK) and not os.access(filename, os.W_OK):
                try:
                    os.chmod(filename, 666)
                except StandardError:
                    self.LogWarn(
                        'Failed to reset access priviledges on file from file system (',
                        filename, ')')
                    sys.exc_clear()

            try:
                store = getattr(self, what)
                if key not in store:
                    try:
                        os.unlink(filename)
                        self.LogInfo('Deleted ', key, ' from file system (',
                                     filename, ')')
                    except StandardError as e:
                        self.LogWarn(
                            'Failed to delete file from file system (',
                            filename, '):', e)
                        sys.exc_clear()

                else:
                    ob = store[key]
                    if not isinstance(ob, uthread.Semaphore):
                        blue.AtomicFileWrite(filename,
                                             blue.marshal.Save((key, ob)))
                        self.LogInfo('Wrote ', key, ' to file (', filename,
                                     ')')
                        self.lastFileWriteTime[self.__KeyFromFileName(
                            filename)] = os.path.getmtime(filename)
            except Exception:
                log.LogException('Error while writing cached data')
                sys.exc_clear()
Exemple #5
0
 def SetVersion(self,
                changeID,
                branch,
                fullFileLock=False,
                systemFolderOK=True):
     versionData = {
         'changeID': changeID,
         'branch': branch,
         'fullFileLock': fullFileLock,
         'systemFolderOK': systemFolderOK
     }
     if not systemFolderOK:
         self._isSystemFolderOK = False
     if not self.IsSystemFolderOK():
         versionData['systemFolderOK'] = False
     fileName = self.GetBulkCachePath() + VERSION_FILENAME
     marshalData = blue.marshal.Save(versionData)
     blue.AtomicFileWrite(fileName, marshalData)
     self._versionData = versionData
Exemple #6
0
 def SaveBulkToFile(self, bulkID, value):
     fileName = self.GetBulkCachePath() + str(bulkID) + BULK_FILE_EXT
     marshalData = blue.marshal.Save(value)
     blue.AtomicFileWrite(fileName, marshalData)