Ejemplo n.º 1
0
    def __init__(self, url, column=0, path='data', space=None, fileName=None):
        Master.__init__(self, None, url, column, fileName=fileName)
        self._data = ViceData(self, "%s/data" % (path))
        self._handles = {}
        self._serverType = ViceServer
        self._size = space

        # stat
        self.blocks = None
        self.fblocks = None
        self.ufiles = None

        self.initStat()
        self.setUrl(url)
Ejemplo n.º 2
0
  def __init__ (self, url, column=0, path='data', space=None, fileName=None):
    Master.__init__ (self, None, url, column, fileName=fileName)
    self._data= ViceData (self, "%s/data" % (path))
    self._handles= {}
    self._serverType= ViceServer
    self._size= space

    # stat
    self.blocks= None
    self.fblocks= None
    self.ufiles= None

    self.initStat ()
    self.setUrl (url)
Ejemplo n.º 3
0
class Vice(Master):
    def __init__(self, url, column=0, path='data', space=None, fileName=None):
        Master.__init__(self, None, url, column, fileName=fileName)
        self._data = ViceData(self, "%s/data" % (path))
        self._handles = {}
        self._serverType = ViceServer
        self._size = space

        # stat
        self.blocks = None
        self.fblocks = None
        self.ufiles = None

        self.initStat()
        self.setUrl(url)

    def initStat(self):
        self.debug(5, 'start...')
        self.blocks = self._size * consts.mega / consts.fragmentSize
        self.debug(5, 'blocks and files...')
        (ublocks, self.ufiles) = self._data.usedBlocksAndFiles()
        self.fblocks = self.blocks - ublocks
        self.debug(5, 'stop!')

    def init(self, net=None, url=None):
        Master.init(self)

        if net:
            peer = None
            finished = self._terminate
            while not finished:
                peer = self.discover(net)
                finished = self._terminate or peer

            if peer:
                self.gossip(peer)
                self.propalate()
                return True
            else:
                return False

        if url:
            key = self.getNavelKey(url)
            peer = self._peers.getNavel(url, key)
            self.gossip(peer)
            self.propalate()
            return True

        return False

    def ident(self):
        return ["i am", str(self.url())]

    def propalate(self):
        navels = self._peers.navels()
        keys = navels.keys()
        keys.sort()
        m = next(keys)
        # just in case there's no more than one navel
        n = m
        # just in case there is more than one navel
        first = m
        for n in keys:
            peer = navels[m]
            self.debug(1, "propalating to %s" % peer)
            self._ring.addData(self.giveData(m, n), n, peer)
            m = n

        # the last one is the one with the WAS.
        peer = navels[m]
        self.debug(1, "propalating to %s" % peer)
        self._ring.addData(self.giveData(m, first), first, peer)

    def keys(self):
        return self._data.keys()

    def sync(self):
        self._data.sync()

    #############
    def emp(self):
        self._data.emp()
        self.initStat()

    def mkRootDir(self):
        self._data.mkdir(consts.rootDirIno)
        return consts.rootDirIno

    def stats(self):
        # f_blocks, f_bavail, f_files
        return (self.blocks, self.fblocks, self.ufiles)

    def updateStats(self):
        # noop
        pass

    def periodic(self):
        # this one should shout its keys
        Master.periodic(self)
        if not self._terminate:
            # can't do it otherwise
            # self.sync ()
            pass
        else:
            self.debug(1, 'you might be pregnant...')

    def stop(self):
        self.sync()
        Master.stop(self)
Ejemplo n.º 4
0
class Vice (Master):
  def __init__ (self, url, column=0, path='data', space=None, fileName=None):
    Master.__init__ (self, None, url, column, fileName=fileName)
    self._data= ViceData (self, "%s/data" % (path))
    self._handles= {}
    self._serverType= ViceServer
    self._size= space

    # stat
    self.blocks= None
    self.fblocks= None
    self.ufiles= None

    self.initStat ()
    self.setUrl (url)

  def initStat (self):
    self.debug (5, 'start...')
    self.blocks= self._size*consts.mega/consts.fragmentSize
    self.debug (5, 'blocks and files...')
    (ublocks, self.ufiles)= self._data.usedBlocksAndFiles ()
    self.fblocks= self.blocks-ublocks
    self.debug (5, 'stop!')

  def init (self, net=None, url=None):
    Master.init (self)

    if net:
      peer= None
      finished= self._terminate
      while not finished:
        peer= self.discover (net)
        finished= self._terminate or peer

      if peer:
        self.gossip (peer)
        self.propalate ()
        return True
      else:
        return False

    if url:
      key= self.getNavelKey (url)
      peer= self._peers.getNavel (url, key)
      self.gossip (peer)
      self.propalate ()
      return True

    return False

  def ident (self):
    return ["i am", str(self.url ())]

  def propalate (self):
    navels= self._peers.navels ()
    keys= navels.keys ()
    keys.sort ()
    m= next (keys)
    # just in case there's no more than one navel
    n= m
    # just in case there is more than one navel
    first= m
    for n in keys:
      peer= navels[m]
      self.debug (1, "propalating to %s" % peer)
      self._ring.addData (self.giveData (m, n), n, peer)
      m= n

    # the last one is the one with the WAS.
    peer= navels[m]
    self.debug (1, "propalating to %s" % peer)
    self._ring.addData (self.giveData (m, first), first, peer)

  def keys (self):
    return self._data.keys ()

  def sync (self):
    self._data.sync ()

  #############
  def emp (self):
    self._data.emp ()
    self.initStat ()

  def mkRootDir (self):
    self._data.mkdir (consts.rootDirIno)
    return consts.rootDirIno

  def stats (self):
    # f_blocks, f_bavail, f_files
    return (self.blocks, self.fblocks, self.ufiles)

  def updateStats (self):
    # noop
    pass

  def periodic (self):
    # this one should shout its keys
    Master.periodic (self)
    if not self._terminate:
      # can't do it otherwise
      # self.sync ()
      pass
    else:
      self.debug (1, 'you might be pregnant...')

  def stop (self):
    self.sync ()
    Master.stop (self)