本文整理汇总了C++中BSONElement::ok方法的典型用法代码示例。如果您正苦于以下问题:C++ BSONElement::ok方法的具体用法?C++ BSONElement::ok怎么用?C++ BSONElement::ok使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BSONElement
的用法示例。
在下文中一共展示了BSONElement::ok方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: StartMongoProgram
// This function starts a program. In its input array it accepts either all commandline tokens
// which will be executed, or a single Object which must have a field named "args" which contains
// an array with all commandline tokens. The Object may have a field named "env" which contains an
// object of Key Value pairs which will be loaded into the environment of the spawned process.
BSONObj StartMongoProgram(const BSONObj& a, void* data) {
_nokillop = true;
BSONObj args = a;
BSONObj env{};
BSONElement firstElement = args.firstElement();
if (firstElement.ok() && firstElement.isABSONObj()) {
BSONObj subobj = firstElement.Obj();
BSONElement argsElem = subobj["args"];
BSONElement envElem = subobj["env"];
uassert(40098,
"If StartMongoProgram is called with a BSONObj, "
"it must contain an 'args' subobject." +
args.toString(),
argsElem.ok() && argsElem.isABSONObj());
args = argsElem.Obj();
if (envElem.ok() && envElem.isABSONObj()) {
env = envElem.Obj();
}
}
ProgramRunner r(args, env);
r.start();
invariant(registry.isPidRegistered(r.pid()));
stdx::thread t(r);
registry.registerReaderThread(r.pid(), std::move(t));
return BSON(string("") << r.pid().asLongLong());
}
示例2: init
Status SetNode::init(BSONElement modExpr, const boost::intrusive_ptr<ExpressionContext>& expCtx) {
invariant(modExpr.ok());
_val = modExpr;
return Status::OK();
}
示例3: init
Status AddToSetNode::init(BSONElement modExpr, const CollatorInterface* collator) {
invariant(modExpr.ok());
bool isEach = false;
// If the value of 'modExpr' is an object whose first field is '$each', treat it as an $each.
if (modExpr.type() == BSONType::Object) {
auto firstElement = modExpr.Obj().firstElement();
if (firstElement && firstElement.fieldNameStringData() == "$each") {
isEach = true;
if (firstElement.type() != BSONType::Array) {
return Status(
ErrorCodes::TypeMismatch,
str::stream()
<< "The argument to $each in $addToSet must be an array but it was of type "
<< typeName(firstElement.type()));
}
if (modExpr.Obj().nFields() > 1) {
return Status(ErrorCodes::BadValue,
str::stream() << "Found unexpected fields after $each in $addToSet: "
<< modExpr.Obj());
}
_elements = firstElement.Array();
}
}
// If the value of 'modExpr' was not an $each, we append the entire element.
if (!isEach) {
_elements.push_back(modExpr);
}
setCollator(collator);
return Status::OK();
}
示例4: report
void report() const {
const OpTime &maxOpTimeSynced = _player->maxOpTimeSynced();
LOG(0) << "synced up to " << fmtOpTime(maxOpTimeSynced);
if (!_rconn) {
LOG(0) << endl;
return;
}
Query lastQuery;
lastQuery.sort("$natural", -1);
BSONObj lastFields = BSON("ts" << 1);
BSONObj lastObj = _rconn->conn().findOne(_oplogns, lastQuery, &lastFields);
BSONElement tsElt = lastObj["ts"];
if (!tsElt.ok()) {
warning() << "couldn't find last oplog entry on remote host" << endl;
LOG(0) << endl;
return;
}
OpTime lastOpTime = OpTime(tsElt.date());
LOG(0) << ", source has up to " << fmtOpTime(lastOpTime);
if (maxOpTimeSynced == lastOpTime) {
LOG(0) << ", fully synced." << endl;
}
else {
int diff = lastOpTime.getSecs() - maxOpTimeSynced.getSecs();
if (diff > 0) {
LOG(0) << ", " << (lastOpTime.getSecs() - maxOpTimeSynced.getSecs())
<< " seconds behind source." << endl;
}
else {
LOG(0) << ", less than 1 second behind source." << endl;
}
}
_reportingTimer.reset();
}
示例5: run
bool run(const string& dbname, BSONObj& cmdObj, int, string& errmsg,
BSONObjBuilder& result, bool fromRepl) {
string ns = dbname + "." + cmdObj.firstElement().valuestrsafe();
const NamespaceDetails* nsd = nsdetails(ns.c_str());
if (!cmdLine.quiet) {
tlog() << "CMD: indexStats " << ns << endl;
}
if (!nsd) {
errmsg = "ns not found";
return false;
}
IndexStatsParams params;
// { index: _index_name }
BSONElement indexName = cmdObj["index"];
if (!indexName.ok() || indexName.type() != String) {
errmsg = "an index name is required, use {index: \"indexname\"}";
return false;
}
params.indexName = indexName.String();
BSONElement expandNodes = cmdObj["expandNodes"];
if (expandNodes.ok()) {
if (expandNodes.type() != mongo::Array) {
errmsg = "expandNodes must be an array of numbers";
return false;
}
vector<BSONElement> arr = expandNodes.Array();
for (vector<BSONElement>::const_iterator it = arr.begin(); it != arr.end(); ++it) {
if (!it->isNumber()) {
errmsg = "expandNodes must be an array of numbers";
return false;
}
params.expandNodes.push_back(int(it->Number()));
}
}
BSONObjBuilder resultBuilder;
if (!runInternal(nsd, params, errmsg, resultBuilder))
return false;
result.appendElements(resultBuilder.obj());
return true;
}
示例6: init
Status BitNode::init(BSONElement modExpr, const CollatorInterface* collator) {
invariant(modExpr.ok());
if (modExpr.type() != mongo::Object) {
return Status(ErrorCodes::BadValue,
str::stream() << "The $bit modifier is not compatible with a "
<< typeName(modExpr.type())
<< ". You must pass in an embedded document: "
"{$bit: {field: {and/or/xor: #}}");
}
for (const auto& curOp : modExpr.embeddedObject()) {
const StringData payloadFieldName = curOp.fieldNameStringData();
BitwiseOp parsedOp;
if (payloadFieldName == "and") {
parsedOp.bitOperator = &SafeNum::bitAnd;
} else if (payloadFieldName == "or") {
parsedOp.bitOperator = &SafeNum::bitOr;
} else if (payloadFieldName == "xor") {
parsedOp.bitOperator = &SafeNum::bitXor;
} else {
return Status(ErrorCodes::BadValue,
str::stream()
<< "The $bit modifier only supports 'and', 'or', and 'xor', not '"
<< payloadFieldName
<< "' which is an unknown operator: {"
<< curOp
<< "}");
}
if ((curOp.type() != mongo::NumberInt) && (curOp.type() != mongo::NumberLong)) {
return Status(ErrorCodes::BadValue,
str::stream()
<< "The $bit modifier field must be an Integer(32/64 bit); a '"
<< typeName(curOp.type())
<< "' is not supported here: {"
<< curOp
<< "}");
}
parsedOp.operand = SafeNum(curOp);
_opList.push_back(parsedOp);
}
if (_opList.empty()) {
return Status(ErrorCodes::BadValue,
str::stream() << "You must pass in at least one bitwise operation. "
<< "The format is: "
"{$bit: {field: {and/or/xor: #}}");
}
return Status::OK();
}
示例7: init
Status RenameNode::init(BSONElement modExpr,
const boost::intrusive_ptr<ExpressionContext>& expCtx) {
invariant(modExpr.ok());
invariant(BSONType::String == modExpr.type());
FieldRef fromFieldRef(modExpr.fieldName());
FieldRef toFieldRef(modExpr.String());
if (modExpr.valueStringData().find('\0') != std::string::npos) {
return Status(ErrorCodes::BadValue,
"The 'to' field for $rename cannot contain an embedded null byte");
}
// Parsing {$rename: {'from': 'to'}} places nodes in the UpdateNode tree for both the "from" and
// "to" paths via UpdateObjectNode::parseAndMerge(), which will enforce this isUpdatable
// property.
dassert(fieldchecker::isUpdatable(fromFieldRef).isOK());
dassert(fieldchecker::isUpdatable(toFieldRef).isOK());
// Though we could treat this as a no-op, it is illegal in the current implementation.
if (fromFieldRef == toFieldRef) {
return Status(ErrorCodes::BadValue,
str::stream() << "The source and target field for $rename must differ: "
<< modExpr);
}
if (fromFieldRef.isPrefixOf(toFieldRef) || toFieldRef.isPrefixOf(fromFieldRef)) {
return Status(ErrorCodes::BadValue,
str::stream() << "The source and target field for $rename must "
"not be on the same path: "
<< modExpr);
}
size_t dummyPos;
if (fieldchecker::isPositional(fromFieldRef, &dummyPos) ||
fieldchecker::hasArrayFilter(fromFieldRef)) {
return Status(ErrorCodes::BadValue,
str::stream() << "The source field for $rename may not be dynamic: "
<< fromFieldRef.dottedField());
} else if (fieldchecker::isPositional(toFieldRef, &dummyPos) ||
fieldchecker::hasArrayFilter(toFieldRef)) {
return Status(ErrorCodes::BadValue,
str::stream() << "The destination field for $rename may not be dynamic: "
<< toFieldRef.dottedField());
}
_val = modExpr;
return Status::OK();
}
示例8: init
Status ArithmeticNode::init(BSONElement modExpr, const CollatorInterface* collator) {
invariant(modExpr.ok());
if (!modExpr.isNumber()) {
return Status(ErrorCodes::TypeMismatch,
str::stream() << "Cannot " << getNameForOp(_op)
<< " with non-numeric argument: {"
<< modExpr
<< "}");
}
_val = modExpr;
return Status::OK();
}
示例9: attemptQuery
bool attemptQuery(int queryOptions) {
BSONObj res;
auto_ptr<DBClientCursor> cursor(_rconn->conn().query(
_oplogns, QUERY("ts" << GTE << _player->maxOpTimeSynced()),
0, 0, &res, queryOptions));
if (!cursor->more()) {
log() << "oplog query returned no results, sleeping 10 seconds..." << endl;
sleepsecs(10);
log() << "retrying" << endl;
return true;
}
BSONObj firstObj = cursor->next();
{
BSONElement tsElt = firstObj["ts"];
if (!tsElt.ok()) {
log() << "oplog format error: " << firstObj << " missing 'ts' field." << endl;
logPosition();
return false;
}
OpTime firstTime(tsElt.date());
if (firstTime != _player->maxOpTimeSynced()) {
throw CantFindTimestamp(firstTime);
}
}
report();
while (running && cursor->more()) {
while (running && cursor->moreInCurrentBatch()) {
BSONObj obj = cursor->next();
LOG(2) << obj << endl;
bool ok = _player->processObj(obj);
if (!ok) {
logPosition();
return false;
}
}
_player->flushInserts();
if (_reportingTimer.seconds() >= _reportingPeriod) {
report();
}
}
return true;
}
示例10: init
Status PullNode::init(BSONElement modExpr, const boost::intrusive_ptr<ExpressionContext>& expCtx) {
invariant(modExpr.ok());
try {
if (modExpr.type() == mongo::Object &&
!MatchExpressionParser::parsePathAcceptingKeyword(
modExpr.embeddedObject().firstElement())) {
_matcher = stdx::make_unique<ObjectMatcher>(modExpr.embeddedObject(), expCtx);
} else if (modExpr.type() == mongo::Object || modExpr.type() == mongo::RegEx) {
_matcher = stdx::make_unique<WrappedObjectMatcher>(modExpr, expCtx);
} else {
_matcher = stdx::make_unique<EqualityMatcher>(modExpr, expCtx->getCollator());
}
} catch (AssertionException& exception) {
return exception.toStatus();
}
return Status::OK();
}
示例11: init
Status CurrentDateNode::init(BSONElement modExpr,
const boost::intrusive_ptr<ExpressionContext>& expCtx) {
invariant(modExpr.ok());
if (modExpr.type() == BSONType::Bool) {
_typeIsDate = true;
} else if (modExpr.type() == BSONType::Object) {
auto foundValidType = false;
for (auto&& elem : modExpr.Obj()) {
if (elem.fieldNameStringData() == kType) {
if (elem.type() == BSONType::String) {
if (elem.valueStringData() == kDate) {
_typeIsDate = true;
foundValidType = true;
} else if (elem.valueStringData() == kTimestamp) {
_typeIsDate = false;
foundValidType = true;
}
}
} else {
return Status(ErrorCodes::BadValue,
str::stream() << "Unrecognized $currentDate option: "
<< elem.fieldNameStringData());
}
}
if (!foundValidType) {
return Status(ErrorCodes::BadValue,
"The '$type' string field is required "
"to be 'date' or 'timestamp': "
"{$currentDate: {field : {$type: 'date'}}}");
}
} else {
return Status(ErrorCodes::BadValue,
str::stream() << typeName(modExpr.type())
<< " is not valid type for $currentDate."
" Please use a boolean ('true')"
" or a $type expression ({$type: 'timestamp/date'}).");
}
return Status::OK();
}
示例12: init
Status ModifierSet::init(const BSONElement& modExpr, const Options& opts,
bool* positional) {
//
// field name analysis
//
// Break down the field name into its 'dotted' components (aka parts) and check that
// the field is fit for updates
_fieldRef.parse(modExpr.fieldName());
Status status = fieldchecker::isUpdatable(_fieldRef);
if (! status.isOK()) {
return status;
}
// If a $-positional operator was used, get the index in which it occurred
// and ensure only one occurrence.
size_t foundCount;
bool foundDollar = fieldchecker::isPositional(_fieldRef, &_posDollar, &foundCount);
if (positional)
*positional = foundDollar;
if (foundDollar && foundCount > 1) {
return Status(ErrorCodes::BadValue,
str::stream() << "Too many positional (i.e. '$') elements found in path '"
<< _fieldRef.dottedField() << "'");
}
//
// value analysis
//
if (!modExpr.ok())
return Status(ErrorCodes::BadValue, "cannot $set an empty value");
_val = modExpr;
_modOptions = opts;
return Status::OK();
}
示例13: open
void Dictionary::open(const BSONObj &info,
const mongo::Descriptor &descriptor, const bool may_create,
const bool hot_index) {
int readPageSize = 65536;
int pageSize = 4 * 1024 * 1024;
TOKU_COMPRESSION_METHOD compression = TOKU_ZLIB_WITHOUT_CHECKSUM_METHOD;
BSONObj key_pattern = info["key"].Obj();
BSONElement e;
e = info["readPageSize"];
if (e.ok() && !e.isNull()) {
readPageSize = BytesQuantity<int>(e);
uassert(16743, "readPageSize must be a number > 0.", readPageSize > 0);
TOKULOG(1) << "db " << _dname << ", using read page size " << readPageSize << endl;
}
e = info["pageSize"];
if (e.ok() && !e.isNull()) {
pageSize = BytesQuantity<int>(e);
uassert(16445, "pageSize must be a number > 0.", pageSize > 0);
TOKULOG(1) << "db " << _dname << ", using page size " << pageSize << endl;
}
e = info["compression"];
if (e.ok() && !e.isNull()) {
std::string str = e.String();
if (str == "lzma") {
compression = TOKU_LZMA_METHOD;
} else if (str == "quicklz") {
compression = TOKU_QUICKLZ_METHOD;
} else if (str == "zlib") {
compression = TOKU_ZLIB_WITHOUT_CHECKSUM_METHOD;
} else if (str == "none") {
compression = TOKU_NO_COMPRESSION;
} else {
uassert(16442, "compression must be one of: lzma, quicklz, zlib, none.", false);
}
TOKULOG(1) << "db " << _dname << ", using compression method \"" << str << "\"" << endl;
}
int r = _db->set_readpagesize(_db, readPageSize);
if (r != 0) {
handle_ydb_error(r);
}
r = _db->set_pagesize(_db, pageSize);
if (r != 0) {
handle_ydb_error(r);
}
r = _db->set_compression_method(_db, compression);
if (r != 0) {
handle_ydb_error(r);
}
// If this is a non-creating open for a read-only (or non-existent)
// transaction, we can use an alternate stack since there's nothing
// to roll back and no locktree locks to hold.
const bool needAltTxn = !may_create && (!cc().hasTxn() || cc().txn().readOnly());
scoped_ptr<Client::AlternateTransactionStack> altStack(!needAltTxn ? NULL :
new Client::AlternateTransactionStack());
scoped_ptr<Client::Transaction> altTxn(!needAltTxn ? NULL :
new Client::Transaction(0));
const int db_flags = may_create ? DB_CREATE : 0;
r = _db->open(_db, cc().txn().db_txn(), _dname.c_str(), NULL,
DB_BTREE, db_flags, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
if (r == ENOENT && !may_create) {
throw NeedsCreate();
}
if (r != 0) {
handle_ydb_error(r);
}
if (may_create) {
set_db_descriptor(_db, descriptor, hot_index);
}
verify_or_upgrade_db_descriptor(_db, descriptor, hot_index);
if (altTxn.get() != NULL) {
altTxn->commit();
}
}
示例14: checkMembersUpForConfigChange
/* called on a reconfig AND on initiate
throws
@param initial true when initiating
*/
void checkMembersUpForConfigChange(const ReplSetConfig& cfg, BSONObjBuilder& result, bool initial) {
int failures = 0, allVotes = 0, allowableFailures = 0;
int me = 0;
stringstream selfs;
for( vector<ReplSetConfig::MemberCfg>::const_iterator i = cfg.members.begin(); i != cfg.members.end(); i++ ) {
if( i->h.isSelf() ) {
me++;
if( me > 1 )
selfs << ',';
selfs << i->h.toString();
if( !i->potentiallyHot() ) {
uasserted(13420, "initiation and reconfiguration of a replica set must be sent to a node that can become primary");
}
}
allVotes += i->votes;
}
allowableFailures = allVotes - (allVotes/2 + 1);
uassert(13278, "bad config: isSelf is true for multiple hosts: " + selfs.str(), me <= 1); // dups?
if( me != 1 ) {
stringstream ss;
ss << "can't find self in the replset config";
if( !cmdLine.isDefaultPort() ) ss << " my port: " << cmdLine.port;
if( me != 0 ) ss << " found: " << me;
uasserted(13279, ss.str());
}
vector<string> down;
for( vector<ReplSetConfig::MemberCfg>::const_iterator i = cfg.members.begin(); i != cfg.members.end(); i++ ) {
// we know we're up
if (i->h.isSelf()) {
continue;
}
BSONObj res;
{
bool ok = false;
try {
ok = requestHeartbeat(cfg._id, "", i->h.toString(), res, -1, initial/*check if empty*/);
if (ok) {
BSONElement vElt = res["v"];
if (vElt.ok()) {
int theirVersion = res["v"].Int();
if( theirVersion >= cfg.version ) {
stringstream ss;
ss << "replSet member " << i->h.toString() << " has too new a config version (" << theirVersion << ") to reconfigure";
uasserted(13259, ss.str());
}
}
}
}
catch(DBException& e) {
log() << "replSet cmufcc requestHeartbeat " << i->h.toString() << " : " << e.toString() << rsLog;
}
catch(...) {
log() << "replSet cmufcc error exception in requestHeartbeat?" << rsLog;
}
if (res.getBoolField("protocolVersionMismatch")) {
uasserted(16817, "member " + i->h.toString() + " has a protocol version that is incompatible with ours: " + res.toString());
}
if( res.getBoolField("mismatch") )
uasserted(13145, "set name does not match the set name host " + i->h.toString() + " expects");
if( *res.getStringField("set") ) {
if( cfg.version <= 1 ) {
// this was to be initiation, no one should be initiated already.
uasserted(13256, "member " + i->h.toString() + " is already initiated");
}
else {
// Assure no one has a newer config.
if( res["v"].Int() >= cfg.version ) {
uasserted(13341, "member " + i->h.toString() + " has a config version >= to the new cfg version; cannot change config");
}
}
}
if( !ok && !res["rs"].trueValue() ) {
down.push_back(i->h.toString());
if( !res.isEmpty() ) {
/* strange. got a response, but not "ok". log it. */
log() << "replSet warning " << i->h.toString() << " replied: " << res.toString() << rsLog;
}
bool allowFailure = false;
failures += i->votes;
if( !initial && failures <= allowableFailures ) {
const Member* m = theReplSet->findById( i->_id );
if( m ) {
verify( m->h().toString() == i->h.toString() );
}
// it's okay if the down member isn't part of the config,
// we might be adding a new member that isn't up yet
allowFailure = true;
}
if( !allowFailure ) {
string msg = string("need all members up to initiate, not ok : ") + i->h.toString();
//.........这里部分代码省略.........
示例15: init
Status UnsetNode::init(BSONElement modExpr, const boost::intrusive_ptr<ExpressionContext>& expCtx) {
// Note that we don't need to store modExpr, because $unset does not do anything with its value.
invariant(modExpr.ok());
return Status::OK();
}