// strategy.h /* * Copyright (C) 2010 10gen Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ #pragma once #include "../stdafx.h" #include "chunk.h" #include "request.h" namespace mongo { class Strategy { public: Strategy(){} virtual ~Strategy() {} virtual void queryOp( Request& r ) = 0; virtual void getMore( Request& r ) = 0; virtual void writeOp( int op , Request& r ) = 0; protected: void doWrite( int op , Request& r , string server ); void doQuery( Request& r , string server ); void insert( string server , const char * ns , const BSONObj& obj ); }; extern Strategy * SINGLE; extern Strategy * SHARDED; bool setShardVersion( DBClientBase & conn , const string& ns , ShardChunkVersion version , bool authoritative , BSONObj& result ); bool lockNamespaceOnServer( const string& server , const string& ns ); bool lockNamespaceOnServer( DBClientBase& conn , const string& ns ); }