Ejemplo n.º 1
0
 void run() {
     ShardKeyPattern shardKeyPattern(shardKey());
     ChunkManager chunkManager("", shardKeyPattern, false);
     chunkManager.setSingleChunkForShards( splitPointsVector() );
     
     set<Shard> shards;
     chunkManager.getShardsForQuery( shards, query() );
     
     BSONArrayBuilder b;
     for( set<Shard>::const_iterator i = shards.begin(); i != shards.end(); ++i ) {
         b << i->getName();
     }
     ASSERT_EQUALS( expectedShardNames(), b.arr() );
 }
Ejemplo n.º 2
0
        static Status checkUniqueIndexConstraints(OperationContext* txn,
                                                  const StringData& ns,
                                                  const BSONObj& newIdxKey) {
            txn->lockState()->assertWriteLocked( ns );

            if ( shardingState.enabled() ) {
                CollectionMetadataPtr metadata(
                        shardingState.getCollectionMetadata( ns.toString() ));

                if ( metadata ) {
                    ShardKeyPattern shardKeyPattern(metadata->getKeyPattern());
                    if (!shardKeyPattern.isUniqueIndexCompatible(newIdxKey)) {
                        return Status(ErrorCodes::CannotCreateIndex,
                            str::stream() << "cannot create unique index over " << newIdxKey
                                          << " with shard key pattern "
                                          << shardKeyPattern.toBSON());
                    }
                }
            }

            return Status::OK();
        }