Beispiel #1
0
def SendChunkToDataserver(args):
    address, cchunk = args
    print(cchunk.ChunkId, address)

    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())
    request = DataForClient_pb2.uploadChunkRequest(metadata=metadata,
                                                   chunk=cchunk.getContent())

    response = stub.uploadChunk(request)
    channel.close()
    return response.Msg
Beispiel #2
0
 def downloadChunk(self, request, context):
     cid = request.ChunkId
     theChunk = StoreManager.StoreManager.get(cid)
     package = DataForClient_pb2.dataOfChunk(ChunkSize=theChunk.ChunkSize,
                                             ChunkId=theChunk.getChunkId(),
                                             inFID=theChunk.getFileID(),
                                             offset=theChunk.getOffset(),
                                             Content=theChunk.getContent())
     return package
Beispiel #3
0
 def copyChunk(self, request, context):
     cchunk = chunk.chunk()
     metadata = request.metadata
     content = request.chunk
     cchunk.ChunkSize = metadata.ChunkSize
     cchunk.ChunkId = metadata.ChunkId
     cchunk.inFID = metadata.inFID
     cchunk.offset = metadata.offset
     cchunk.StoreDID = StoreManager.StoreManager.getDID()
     cchunk.Content = content
     StoreManager.StoreManager.store(cchunk, True)
     print(cchunk.ChunkId, 'Backup Done!')
     return DataForClient_pb2.copyChunkResponse(Msg='ok')
Beispiel #4
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
Beispiel #5
0
    def uploadChunk(self, request, context):
        cchunk = chunk.chunk()
        metadata = request.metadata
        content = request.chunk
        cchunk.ChunkSize = metadata.ChunkSize
        cchunk.ChunkId = metadata.ChunkId
        cchunk.inFID = metadata.inFID
        cchunk.offset = metadata.offset
        cchunk.StoreDID = metadata.StoreDID
        cchunk.Content = content
        print(cchunk.ChunkId, 'Done!')
        StoreManager.StoreManager.store(cchunk)

        # 投票
        vote(cchunk.getFileID(), cchunk.getChunkId(), 1)

        return DataForClient_pb2.uploadChunkResponse(Msg='Saved!')
Beispiel #6
0
def downloadChunk(stub, CID):
    package = DataForClient_pb2.downloadRequest(
        ChunkId=CID
    )
    chunkData = stub.downloadChunk(package)
    return chunkData