bool CatalogManagerReplicaSet::runReadCommand(const std::string& dbname, const BSONObj& cmdObj, BSONObjBuilder* result) { auto targeter = grid.shardRegistry()->getShard("config")->getTargeter(); auto target = targeter->findHost(kConfigReadSelector); if (!target.isOK()) { return Command::appendCommandStatus(*result, target.getStatus()); } auto resultStatus = grid.shardRegistry()->runCommand(target.getValue(), dbname, cmdObj); if (!resultStatus.isOK()) { return Command::appendCommandStatus(*result, resultStatus.getStatus()); } result->appendElements(resultStatus.getValue()); return Command::getStatusFromCommandResult(resultStatus.getValue()).isOK(); }
bool CatalogManagerReplicaSet::_runReadCommand(OperationContext* txn, const std::string& dbname, const BSONObj& cmdObj, const ReadPreferenceSetting& settings, BSONObjBuilder* result) { auto targeter = grid.shardRegistry()->getShard(txn, "config")->getTargeter(); auto target = targeter->findHost(settings); if (!target.isOK()) { return Command::appendCommandStatus(*result, target.getStatus()); } auto resultStatus = grid.shardRegistry()->runCommandOnConfig(target.getValue(), dbname, cmdObj); if (!resultStatus.isOK()) { return Command::appendCommandStatus(*result, resultStatus.getStatus()); } result->appendElements(resultStatus.getValue()); return Command::getStatusFromCommandResult(resultStatus.getValue()).isOK(); }
/* organize fetch bundling for given expression */ static void bundle(Task *t, Expr *x) { Metric *m; Host *h; int i; if (x->op == CND_FETCH) { m = x->metrics; for (i = 0; i < x->hdom; i++) { h = findHost(t, m); m->host = h; if (m->conv) /* initialized Metric */ bundleMetric(h, m); else /* uninitialized Metric */ waitMetric(m); m++; } #if PCP_DEBUG if (pmDebug & DBG_TRACE_APPL1) { fprintf(stderr, "bundle: task " PRINTF_P_PFX "%p nth=%d prev=" PRINTF_P_PFX "%p next=" PRINTF_P_PFX "%p delta=%.3f nrules=%d\n", t, t->nth, t->prev, t->next, t->delta, t->nrules+1); __dumpExpr(1, x); m = x->metrics; for (i = 0; i < x->hdom; i++) { __dumpMetric(2, m); m++; } } #endif } else { if (x->arg1) { bundle(t, x->arg1); if (x->arg2) bundle(t, x->arg2); } } }
StatusWith<BSONObj> CatalogManagerReplicaSet::_runConfigServerCommandWithNotMasterRetries( const std::string& dbname, const BSONObj& cmdObj) { auto targeter = grid.shardRegistry()->getShard("config")->getTargeter(); for (int i = 0; i < kNotMasterNumRetries; ++i) { auto target = targeter->findHost(kConfigWriteSelector); if (!target.isOK()) { if (ErrorCodes::NotMaster == target.getStatus()) { if (i == kNotMasterNumRetries - 1) { // If we're out of retries don't bother sleeping, just return. return target.getStatus(); } sleepmillis(kNotMasterRetryInterval.count()); continue; } return target.getStatus(); } auto response = grid.shardRegistry()->runCommand(target.getValue(), dbname, cmdObj); if (!response.isOK()) { return response.getStatus(); } Status commandStatus = Command::getStatusFromCommandResult(response.getValue()); if (ErrorCodes::NotMaster == commandStatus) { if (i == kNotMasterNumRetries - 1) { // If we're out of retries don't bother sleeping, just return. return commandStatus; } sleepmillis(kNotMasterRetryInterval.count()); continue; } return response.getValue(); } MONGO_UNREACHABLE; }