//读取Master的packet,清空chunk //调用:masterconn_gotpacket() void masterconn_truncate(masterconn *eptr,const uint8_t *data,uint32_t length) { uint64_t chunkid; uint32_t version; uint32_t leng; uint32_t newversion; uint8_t *ptr; #ifdef BGJOBS void *packet; #else /* BGJOBS */ uint8_t status; #endif /* BGJOBS */ if (length!=8+4+4+4) { syslog(LOG_NOTICE,"MATOCS_TRUNCATE - wrong size (%"PRIu32"/20)",length); eptr->mode = KILL; return; } chunkid = get64bit(&data); leng = get32bit(&data); newversion = get32bit(&data); version = get32bit(&data); #ifdef BGJOBS packet = masterconn_create_detached_packet(CSTOMA_TRUNCATE,8+1); if (packet==NULL) { eptr->mode=KILL; return; } ptr = masterconn_get_packet_data(packet); put64bit(&ptr,chunkid); job_truncate(eptr->jpool,masterconn_jobfinished,packet,chunkid,version,newversion,leng); #else /* BGJOBS */ status = hdd_truncate(chunkid,version,newversion,leng); ptr = masterconn_create_attached_packet(eptr,CSTOMA_TRUNCATE,8+1); if (ptr==NULL) { eptr->mode=KILL; return; } put64bit(&ptr,chunkid); put8bit(&ptr,status); #endif /* BGJOBS */ }
void masterconn_truncate(masterconn *eptr,const uint8_t *data,uint32_t length) { uint64_t chunkid; uint32_t version; uint32_t leng; uint32_t newversion; uint8_t *ptr; void *packet; if (length!=8+4+4+4) { syslog(LOG_NOTICE,"MATOCS_TRUNCATE - wrong size (%"PRIu32"/20)",length); eptr->mode = KILL; return; } chunkid = get64bit(&data); leng = get32bit(&data); newversion = get32bit(&data); version = get32bit(&data); packet = masterconn_create_detached_packet(eptr,CSTOMA_TRUNCATE,8+1); ptr = masterconn_get_packet_data(packet); put64bit(&ptr,chunkid); job_truncate(masterconn_jobfinished,packet,chunkid,version,newversion,leng); }