//读取Master的packet,复制chunk //调用:masterconn_gotpacket() void masterconn_duplicate(masterconn *eptr,const uint8_t *data,uint32_t length) { uint64_t chunkid; uint32_t version; uint64_t copychunkid; uint32_t copyversion; uint8_t *ptr; #ifdef BGJOBS void *packet; #else /* BGJOBS */ uint8_t status; #endif /* BGJOBS */ if (length!=8+4+8+4) { syslog(LOG_NOTICE,"MATOCS_DUPLICATE - wrong size (%"PRIu32"/24)",length); eptr->mode = KILL; return; } copychunkid = get64bit(&data); copyversion = get32bit(&data); chunkid = get64bit(&data); version = get32bit(&data); #ifdef BGJOBS packet = masterconn_create_detached_packet(CSTOMA_DUPLICATE,8+1); if (packet==NULL) { eptr->mode=KILL; return; } ptr = masterconn_get_packet_data(packet); put64bit(&ptr,copychunkid); job_duplicate(eptr->jpool,masterconn_jobfinished,packet,chunkid,version,version,copychunkid,copyversion); #else /* BGJOBS */ status = hdd_duplicate(chunkid,version,version,copychunkid,copyversion); ptr = masterconn_create_attached_packet(eptr,CSTOMA_DUPLICATE,8+1); if (ptr==NULL) { eptr->mode=KILL; return; } put64bit(&ptr,copychunkid); put8bit(&ptr,status); #endif /* BGJOBS */ }
void masterconn_duplicate(masterconn *eptr,const uint8_t *data,uint32_t length) { uint64_t chunkid; uint32_t version; uint64_t copychunkid; uint32_t copyversion; uint8_t *ptr; void *packet; if (length!=8+4+8+4) { syslog(LOG_NOTICE,"MATOCS_DUPLICATE - wrong size (%"PRIu32"/24)",length); eptr->mode = KILL; return; } copychunkid = get64bit(&data); copyversion = get32bit(&data); chunkid = get64bit(&data); version = get32bit(&data); packet = masterconn_create_detached_packet(eptr,CSTOMA_DUPLICATE,8+1); ptr = masterconn_get_packet_data(packet); put64bit(&ptr,copychunkid); job_duplicate(masterconn_jobfinished,packet,chunkid,version,version,copychunkid,copyversion); }