00001
00002
00019 #pragma once
00020
00021 #include "../pch.h"
00022
00023 #include "../db/jsobj.h"
00024 #include "util.h"
00025
00026 namespace mongo {
00027
00040 class ShardChunkManager : public boost::noncopyable {
00041 public:
00042
00054 ShardChunkManager( const string& configServer , const string& ns , const string& shardName );
00055
00062 ShardChunkManager( const BSONObj& collectionDoc , const BSONArray& chunksDoc );
00063
00064 ~ShardChunkManager() {}
00065
00074 ShardChunkManager* cloneMinus( const BSONObj& min , const BSONObj& max , const ShardChunkVersion& version );
00075
00083 ShardChunkManager* clonePlus( const BSONObj& min , const BSONObj& max , const ShardChunkVersion& version );
00084
00093 ShardChunkManager* cloneSplit( const BSONObj& min , const BSONObj& max , const vector<BSONObj>& splitKeys ,
00094 const ShardChunkVersion& version );
00095
00102 bool belongsToMe( const BSONObj& obj ) const;
00103
00112 bool getNextChunk( const BSONObj& lookupKey, BSONObj* foundMin , BSONObj* foundMax ) const;
00113
00114
00115
00116 ShardChunkVersion getVersion() const { return _version; }
00117 BSONObj getKey() const { return _key.getOwned(); }
00118 unsigned getNumChunks() const { return _chunksMap.size(); }
00119
00120 string toString() const;
00121 private:
00122
00123 ShardChunkVersion _version;
00124
00125
00126 BSONObj _key;
00127
00128
00129 typedef map< BSONObj, BSONObj , BSONObjCmp > RangeMap;
00130 RangeMap _chunksMap;
00131
00132
00133
00134 RangeMap _rangesMap;
00135
00137 void _fillCollectionKey( const BSONObj& collectionDoc );
00138 void _fillChunks( DBClientCursorInterface* cursor );
00139 void _fillRanges();
00140
00142 void _assertChunkExists( const BSONObj& min , const BSONObj& max ) const;
00143
00145 ShardChunkManager() {}
00146 };
00147
00148 typedef shared_ptr<ShardChunkManager> ShardChunkManagerPtr;
00149
00150 }