示例#1
0
 def Lock(self, request, context):
     # 为文件加锁
     lock_time = self._lock_file(request.text, self.DEFAULT_LOCK_TIME)
     if lock_time:
         reply = self.LOCK_RESPONSE % (request.text, lock_time)
         return service_pb2.SimpleReply(text=reply, flag=True)
     else:
         reply = self.FAIL_RESPONSE % (0, str(self.DEFAULT_LOCK_TIME))
         return service_pb2.SimpleReply(text=reply, flag=False)
示例#2
0
    def GetFileServer(self, request, context):
        # 根据文件名找到相应的服务器,如果不存在,则返回随机一个
        # 解析路径
        path, file = os.path.split(request.text)
        name, ext = os.path.splitext(file)
        filename = hashlib.sha256(
            request.text.encode('utf-8')).hexdigest() + ext
        host, port = self._find_host(path)

        if not host:
            # 不存在则创建
            server_id = self._pick_random_host()
            self._create_dir(path, server_id)
            host, port = self._find_host(path)
            flag = False
        else:
            flag = True

        # 获取有备份的其余文件服务器
        slave_string = self._get_slave_string(host, port)
        reply = self.GET_RESPONSE % (host, port, filename, slave_string)
        return service_pb2.SimpleReply(flag=flag, text=reply)
示例#3
0
 def Delete(self, request, context):
     # 删除服务器上的文件
     path = os.path.join(self.BUCKET_LOCATION, request.text)
     os.system('rm %s' % path)
     return service_pb2.SimpleReply(flag=True, text=self.DELETE_DONE)
示例#4
0
 def Update(self, request, context):
     # 更新服务器上的某个文件
     self._write_file(request.text, request.data)
     return service_pb2.SimpleReply(flag=True, text=self.UPDATE_DONE)
示例#5
0
    def Upload(self, request, context):
        # 客户端上传文件到当前文件服务器,并同步更新其他节点
        self._write_file(request.text, request.data)
        self._update_slaves(request)

        return service_pb2.SimpleReply(flag=True, text=self.UPLOAD_DONE)
示例#6
0
 def Unlock(self, request, context):
     # 给文件解锁
     lock_time = self._unlock_file(request.text)
     reply = self.LOCK_RESPONSE % (request.text, lock_time)
     return service_pb2.SimpleReply(text=reply, flag=True)
示例#7
0
 def GetSlaves(self, request, context):
     # 获取其他文件服务器节点
     host, port = request.text.split(':')
     reply = self._get_slave_string(host, port)
     return service_pb2.SimpleReply(flag=True, text=reply)