コード例 #1
0
 def copyChunkBetweenDataServer(self, request, context):
     cid = request.CID
     address = request.copyip + ':' + str(request.copyport)
     cchunk = StoreManager.StoreManager.get(cid)
     cchunk.setCID(request.copycid)
     channel = grpc.insecure_channel(address)
     stub = DataForClient_pb2_grpc.DFCStub(channel)
     metadata = DataForClient_pb2.MetaData(
         ChunkSize=cchunk.ChunkSize,
         ChunkId=cchunk.getChunkId(),
         inFID=cchunk.getFileID(),
         offset=cchunk.getOffset(),
         StoreDID=cchunk.getDataserverID())
     package = DataForClient_pb2.copyChunkRequest(metadata=metadata,
                                                  chunk=cchunk.getContent())
     answer = stub.copyChunk(package)
     channel.close()
     if answer.Msg == 'ok':
         response = DataForMaster_pb2.ACK1(feedback=True)
     else:
         response = DataForMaster_pb2.ACK1(feedback=False)
     return response
コード例 #2
0
    def Recommit(self, request, context):
        iscommit = FileManager.sys.vote(request.FID, request.CID)

        if iscommit:
            # update filetree
            filetree.FileTree.insertNode(
                FileManager.sys.FindByFID(request.FID).path, False)
            # ask dataserver commit
            chunklist = FileManager.sys.FindByFID(request.FID).getChunkList()
            for c in chunklist:
                did = c.StoreDID
                cid = c.ChunkId
                ip, port = FileManager.sys.SeekSocket(did)
                channel = grpc.insecure_channel(ip + ':' + str(port))
                stub = DataForMaster_pb2_grpc.DFMStub(channel)
                stub.recommitChunk(DataForMaster_pb2.chunkID(CID=cid))
                channel.close()
                # backup
                Backup.BackupManager.insertCreateTask(c.getFileID(), c.ChunkId)
        return MasterForData_pb2.recommitResponse(isCommit=iscommit)
コード例 #3
0
 def heartbeat(self, request, context):
     did = request.did
     if did == StoreManager.StoreManager.getDID():
         return DataForMaster_pb2.ACK1(feedback=True)
     else:
         return DataForMaster_pb2.ACK1(feedback=False)
コード例 #4
0
 def recommitChunk(self, request, context):
     cid = request.CID
     StoreManager.StoreManager.commit(cid)
     print('commit', cid)
     return DataForMaster_pb2.ACK1(feedback=True)
コード例 #5
0
 def deleteChunkOnDataServer(self, request, context):
     cid = request.CID
     response = DataForMaster_pb2.ACK1(
         feedback=StoreManager.StoreManager.aborted(cid))
     return response
コード例 #6
0
def sendheartbeat(stub, did):
    package = DataForMaster_pb2.heartrequest(did=did)
    return stub.heartbeat(package)
コード例 #7
0
def copyChunkBetweenDataServer(stub, CID, copyip, copyport, copycid):
    package = DataForMaster_pb2.copyChunk(CID=CID,
                                          copyip=copyip,
                                          copyport=copyport,
                                          copycid=copycid)
    return stub.copyChunkBetweenDataServer(package)
コード例 #8
0
def deleteChunkOnDataServer(stub, CID):
    # 删除成功返回 True, 否则 False
    pakage = DataForMaster_pb2.chunkID(CID=CID)
    return stub.deleteChunkOnDataServer(pakage)