void run() { ASSERT( Database::validDBName( "foo" ) ); ASSERT( ! Database::validDBName( "foo/bar" ) ); ASSERT( ! Database::validDBName( "foo.bar" ) ); ASSERT( isANormalNSName( "asdads" ) ); ASSERT( ! isANormalNSName( "asda$ds" ) ); ASSERT( isANormalNSName( "local.oplog.$main" ) ); }
bool compact(const string& ns, string &errmsg, bool validate, BSONObjBuilder& result) { massert( 14028, "bad ns", isANormalNSName(ns.c_str()) ); massert( 14027, "can't compact a system namespace", !str::contains(ns, ".system.") ); // items in system.indexes cannot be moved there are pointers to those disklocs in NamespaceDetails bool ok; { writelock lk; BackgroundOperation::assertNoBgOpInProgForNs(ns.c_str()); Client::Context ctx(ns); NamespaceDetails *d = nsdetails(ns.c_str()); massert( 13660, str::stream() << "namespace " << ns << " does not exist", d ); massert( 13661, "cannot compact capped collection", !d->capped ); log() << "compact " << ns << " begin" << endl; try { ok = _compact(ns.c_str(), d, errmsg, validate, result); } catch(...) { log() << "compact " << ns << " end (with error)" << endl; throw; } log() << "compact " << ns << " end" << endl; } return ok; }