int CHUNK::recovery_action(double now) { int retval; char buf[256]; VDA_FILE_AUX* fp = parent->dfile; if (data_now_present) { present_on_server = true; #if 0 fp->disk_usage.sample_inc( size, fp->collecting_stats(), now, "recovery_action: now present" ); #endif status = PRESENT; } if (status == PRESENT && (int)(hosts.size()) < fp->policy.replication) { retval = assign(); if (retval) return retval; keep_present = true; } if (download_in_progress()) { keep_present = true; } if (debug_status) { printf(" chunk %s: data_needed %d present_on_server %d keep_present %d\n", name, data_needed, present_on_server, keep_present ); } if (present_on_server) { if (!keep_present) { sprintf(buf, " chunk %s: not needed, removing from server\n", name ); show_msg(buf); retval = delete_file(); if (retval) return retval; present_on_server = false; status = RECOVERABLE; min_failures = fp->policy.replication; parent->dfile->disk_usage.sample_inc( -size, fp->collecting_stats(), now, "recovery_action: don't need" ); } } else { if (data_needed) { retval = start_upload(); if (retval) return retval; } } return 0; }
int CHUNK::recovery_action(double now) { int retval; char buf[256]; VDA_FILE_AUX* fp = parent->dfile; if (data_now_present) { present_on_server = true; fp->disk_usage.sample_inc( size, fp->collecting_stats(), now ); status = PRESENT; } if (status == PRESENT && (int)(hosts.size()) < fp->policy.replication) { retval = assign(); if (retval) return retval; } if (download_in_progress()) { data_needed = true; } #ifdef DEBUG_RECOVERY printf("chunk action: %s data_needed %d present_on_server %d\n", name, data_needed, present_on_server ); #endif if (data_needed) { if (!present_on_server) { retval = start_upload(); if (retval) return retval; } } else { if (present_on_server) { present_on_server = false; status = RECOVERABLE; min_failures = fp->policy.replication; sprintf(buf, "%s replicated, removing from server\n", name); show_msg(buf); parent->dfile->disk_usage.sample_inc( -size, fp->collecting_stats(), now ); } } return 0; }