BIIndexType bi_index_type = PlainIdx;
string job_id;
- int init_search = false;
int num_shards = 0;
int max_concurrent_ios = 32;
uint64_t orphan_stale_secs = (24 * 3600);
// do nothing
} else if (ceph_argparse_binary_flag(args, i, &include_all, NULL, "--include-all", (char*)NULL)) {
// do nothing
- } else if (ceph_argparse_binary_flag(args, i, &init_search, NULL, "--init-search", (char*)NULL)) {
- // do nothing
} else if (ceph_argparse_witharg(args, i, &val, "--caps", (char*)NULL)) {
caps = val;
} else if (ceph_argparse_witharg(args, i, &val, "-i", "--infile", (char*)NULL)) {
cerr << "ERROR: --job-id not specified" << std::endl;
return EINVAL;
}
- RGWOrphanSearchInfo info, *pinfo = NULL;
- if (init_search) {
- if (pool_name.empty()) {
- cerr << "ERROR: --pool not specified" << std::endl;
- return EINVAL;
- }
- info.pool = pool_name;
- info.job_name = job_id;
- info.num_shards = num_shards;
- pinfo = &info;
+ if (pool_name.empty()) {
+ cerr << "ERROR: --pool not specified" << std::endl;
+ return EINVAL;
}
- int ret = search.init(job_id, pinfo);
+ RGWOrphanSearchInfo info;
+
+ info.pool = pool_name;
+ info.job_name = job_id;
+ info.num_shards = num_shards;
+
+ int ret = search.init(job_id, &info);
if (ret < 0) {
if (ret == -EEXIST) {
cerr << "cannot init new search, job already exists" << std::endl;
return r;
}
- if (info) {
+ RGWOrphanSearchState state;
+ r = orphan_store.read_job(job_name, state);
+ if (r < 0 && r != -ENOENT) {
+ lderr(store->ctx()) << "ERROR: failed to read state ret=" << r << dendl;
+ return r;
+ }
+
+ if (r == 0) {
+ if (info->num_shards != state.info.num_shards) {
+ lderr(store->ctx()) << "ERROR: cannot specify different number of shards for existing job" << dendl;
+ return -EINVAL;
+ }
+ search_info = state.info;
+ search_stage = state.stage;
+ } else { /* r == -ENOENT */
search_info = *info;
search_info.job_name = job_name;
search_info.num_shards = (info->num_shards ? info->num_shards : DEFAULT_NUM_SHARDS);
search_info.start_time = ceph_clock_now(store->ctx());
search_stage = RGWOrphanSearchStage(ORPHAN_SEARCH_STAGE_INIT);
- RGWOrphanSearchState state;
- r = orphan_store.read_job(job_name, state);
- if (r >= 0) {
- lderr(store->ctx()) << "ERROR: job already exists" << dendl;
- return -EEXIST;
- }
r = save_state();
if (r < 0) {
lderr(store->ctx()) << "ERROR: failed to write state ret=" << r << dendl;
return r;
}
- } else {
- RGWOrphanSearchState state;
- r = orphan_store.read_job(job_name, state);
- if (r < 0) {
- lderr(store->ctx()) << "ERROR: failed to read state ret=" << r << dendl;
- return r;
- }
-
- search_info = state.info;
- search_stage = state.stage;
}
index_objs_prefix = RGW_ORPHAN_INDEX_PREFIX + string(".");