Exemple #1
0
        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" ) );
        }
Exemple #2
0
    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;
    }