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
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)
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)
def recommitChunk(self, request, context): cid = request.CID StoreManager.StoreManager.commit(cid) print('commit', cid) return DataForMaster_pb2.ACK1(feedback=True)
def deleteChunkOnDataServer(self, request, context): cid = request.CID response = DataForMaster_pb2.ACK1( feedback=StoreManager.StoreManager.aborted(cid)) return response
def sendheartbeat(stub, did): package = DataForMaster_pb2.heartrequest(did=did) return stub.heartbeat(package)
def copyChunkBetweenDataServer(stub, CID, copyip, copyport, copycid): package = DataForMaster_pb2.copyChunk(CID=CID, copyip=copyip, copyport=copyport, copycid=copycid) return stub.copyChunkBetweenDataServer(package)
def deleteChunkOnDataServer(stub, CID): # 删除成功返回 True, 否则 False pakage = DataForMaster_pb2.chunkID(CID=CID) return stub.deleteChunkOnDataServer(pakage)