as_status aerospike_scan_info( aerospike* as, as_error* err, const as_policy_info* policy, uint64_t scan_id, as_scan_info* info ) { as_job_info job_info; as_status status = aerospike_job_info(as, err, policy, "scan", scan_id, false, &job_info); if (status == AEROSPIKE_OK) { switch (job_info.status) { case AS_JOB_STATUS_COMPLETED: info->status = AS_SCAN_STATUS_COMPLETED; break; case AS_JOB_STATUS_INPROGRESS: info->status = AS_SCAN_STATUS_INPROGRESS; break; default: info->status = AS_SCAN_STATUS_UNDEF; break; } info->progress_pct = job_info.progress_pct; info->records_scanned = job_info.records_read; } return status; }
as_status aerospike_job_wait( aerospike* as, as_error* err, const as_policy_info* policy, const char* module, uint64_t job_id, uint32_t interval_ms) { uint32_t interval_micros = (interval_ms <= 0)? 1000 * 1000 : interval_ms * 1000; as_job_info info; as_status status; // Poll to see when job is done. do { usleep(interval_micros); status = aerospike_job_info(as, err, policy, module, job_id, true, &info); } while (status == AEROSPIKE_OK && info.status == AS_JOB_STATUS_INPROGRESS); return status; }