// Copyright Epic Games, Inc. All Rights Reserved.
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using MongoDB.Bson;
using MongoDB.Bson.Serialization;
using MongoDB.Driver;
using MongoDB.Driver.Search;
using OpenTelemetry.Trace;
#pragma warning disable VSTHRD002 // Synchronous waits
namespace HordeServer.Utilities
{
///
/// Wrap a IMongoCollection with trace scopes
///
/// Will capture the entire invocation of MongoDB calls, including serialization.
/// The other command logging (not in this file) only deals with queries sent to the server at the protocol level.
///
/// A MongoDB document
public class MongoTracingCollection : IMongoCollection
{
private readonly IMongoCollection _collection;
private readonly Task _upgradeTask;
private readonly Tracer _tracer;
///
/// Constructor
///
/// Collection to wrap with tracing
/// Task which creates indexes
/// Tracer
public MongoTracingCollection(IMongoCollection collection, Task indexCreationTask, Tracer tracer)
{
_collection = collection;
_upgradeTask = indexCreationTask;
_tracer = tracer;
}
#pragma warning disable CS0618
///
public IAsyncCursor Aggregate(PipelineDefinition pipeline, AggregateOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.Aggregate(pipeline, options, cancellationToken);
}
///
public IAsyncCursor Aggregate(IClientSessionHandle session, PipelineDefinition pipeline, AggregateOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.Aggregate(session, pipeline, options, cancellationToken);
}
///
public async Task> AggregateAsync(PipelineDefinition pipeline, AggregateOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(AggregateAsync), _collection);
return await _collection.AggregateAsync(pipeline, options, cancellationToken);
}
///
public async Task> AggregateAsync(IClientSessionHandle session, PipelineDefinition pipeline, AggregateOptions options = null!,
CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(AggregateAsync), _collection);
return await _collection.AggregateAsync(session, pipeline, options, cancellationToken);
}
///
public void AggregateToCollection(PipelineDefinition pipeline, AggregateOptions? options = null, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
_collection.AggregateToCollection(pipeline, options, cancellationToken);
}
///
public void AggregateToCollection(IClientSessionHandle session, PipelineDefinition pipeline, AggregateOptions? options = null, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
_collection.AggregateToCollection(session, pipeline, options, cancellationToken);
}
///
public async Task AggregateToCollectionAsync(PipelineDefinition pipeline, AggregateOptions? options = null, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(AggregateToCollectionAsync), _collection);
await _collection.AggregateToCollectionAsync(pipeline, options, cancellationToken);
}
///
public async Task AggregateToCollectionAsync(IClientSessionHandle session, PipelineDefinition pipeline, AggregateOptions? options = null, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(AggregateToCollectionAsync), _collection);
await _collection.AggregateToCollectionAsync(session, pipeline, options, cancellationToken);
}
///
public BulkWriteResult BulkWrite(IEnumerable> requests, BulkWriteOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.BulkWrite(requests, options, cancellationToken);
}
///
public BulkWriteResult BulkWrite(IClientSessionHandle session, IEnumerable> requests, BulkWriteOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.BulkWrite(session, requests, options, cancellationToken);
}
///
public async Task> BulkWriteAsync(IEnumerable> requests, BulkWriteOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(BulkWriteAsync), _collection);
return await _collection.BulkWriteAsync(requests, options, cancellationToken);
}
///
public async Task> BulkWriteAsync(IClientSessionHandle session, IEnumerable> requests, BulkWriteOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(BulkWriteAsync), _collection);
return await _collection.BulkWriteAsync(session, requests, options, cancellationToken);
}
///
public long Count(FilterDefinition filter, CountOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.Count(filter, options, cancellationToken);
}
///
public long Count(IClientSessionHandle session, FilterDefinition filter, CountOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.Count(session, filter, options, cancellationToken);
}
///
public async Task CountAsync(FilterDefinition filter, CountOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(CountAsync), _collection);
return await _collection.CountAsync(filter, options, cancellationToken);
}
///
public async Task CountAsync(IClientSessionHandle session, FilterDefinition filter, CountOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(CountAsync), _collection);
return await _collection.CountAsync(session, filter, options, cancellationToken);
}
///
public long CountDocuments(FilterDefinition filter, CountOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.CountDocuments(filter, options, cancellationToken);
}
///
public long CountDocuments(IClientSessionHandle session, FilterDefinition filter, CountOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.CountDocuments(session, filter, options, cancellationToken);
}
///
public async Task CountDocumentsAsync(FilterDefinition filter, CountOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask;
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(CountDocumentsAsync), _collection, filter);
return await _collection.CountDocumentsAsync(filter, options, cancellationToken);
}
///
public async Task CountDocumentsAsync(IClientSessionHandle session, FilterDefinition filter, CountOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(CountDocumentsAsync), _collection, filter);
return await _collection.CountDocumentsAsync(session, filter, options, cancellationToken);
}
///
public DeleteResult DeleteMany(FilterDefinition filter, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.DeleteMany(filter, cancellationToken);
}
///
public DeleteResult DeleteMany(FilterDefinition filter, DeleteOptions options, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.DeleteMany(filter, options, cancellationToken);
}
///
public DeleteResult DeleteMany(IClientSessionHandle session, FilterDefinition filter, DeleteOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.DeleteMany(session, filter, options, cancellationToken);
}
///
public async Task DeleteManyAsync(FilterDefinition filter, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(DeleteManyAsync), _collection, filter);
return await _collection.DeleteManyAsync(filter, cancellationToken);
}
///
public async Task DeleteManyAsync(FilterDefinition filter, DeleteOptions options, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(DeleteManyAsync), _collection, filter);
return await _collection.DeleteManyAsync(filter, options, cancellationToken);
}
///
public async Task DeleteManyAsync(IClientSessionHandle session, FilterDefinition filter, DeleteOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask;
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(DeleteManyAsync), _collection, filter);
return await _collection.DeleteManyAsync(session, filter, options, cancellationToken);
}
///
public DeleteResult DeleteOne(FilterDefinition filter, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.DeleteOne(filter, cancellationToken);
}
///
public DeleteResult DeleteOne(FilterDefinition filter, DeleteOptions options, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.DeleteOne(filter, options, cancellationToken);
}
///
public DeleteResult DeleteOne(IClientSessionHandle session, FilterDefinition filter, DeleteOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.DeleteOne(session, filter, options, cancellationToken);
}
///
public async Task DeleteOneAsync(FilterDefinition filter, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(DeleteOneAsync), _collection, filter);
return await _collection.DeleteOneAsync(filter, cancellationToken);
}
///
public async Task DeleteOneAsync(FilterDefinition filter, DeleteOptions options, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(DeleteOneAsync), _collection, filter);
return await _collection.DeleteOneAsync(filter, options, cancellationToken);
}
///
public async Task DeleteOneAsync(IClientSessionHandle session, FilterDefinition filter, DeleteOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(DeleteOneAsync), _collection, filter);
return await _collection.DeleteOneAsync(session, filter, options, cancellationToken);
}
///
public IAsyncCursor Distinct(FieldDefinition field, FilterDefinition filter, DistinctOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.Distinct(field, filter, options, cancellationToken);
}
///
public IAsyncCursor Distinct(IClientSessionHandle session, FieldDefinition field, FilterDefinition filter, DistinctOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.Distinct(session, field, filter, options, cancellationToken);
}
///
public async Task> DistinctAsync(FieldDefinition field, FilterDefinition filter, DistinctOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(DistinctAsync), _collection, filter);
return await _collection.DistinctAsync(field, filter, options, cancellationToken);
}
///
public async Task> DistinctAsync(IClientSessionHandle session, FieldDefinition field, FilterDefinition filter, DistinctOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(DistinctAsync), _collection, filter);
return await _collection.DistinctAsync(session, field, filter, options, cancellationToken);
}
///
public long EstimatedDocumentCount(EstimatedDocumentCountOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.EstimatedDocumentCount(options, cancellationToken);
}
///
public async Task EstimatedDocumentCountAsync(EstimatedDocumentCountOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(EstimatedDocumentCountAsync), _collection);
return await _collection.EstimatedDocumentCountAsync(options, cancellationToken);
}
///
public IAsyncCursor FindSync(FilterDefinition filter, FindOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.FindSync(filter, options, cancellationToken);
}
///
public IAsyncCursor FindSync(IClientSessionHandle session, FilterDefinition filter, FindOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.FindSync(session, filter, options, cancellationToken);
}
///
public async Task> FindAsync(FilterDefinition filter, FindOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(FindAsync), _collection, filter);
return await _collection.FindAsync(filter, options, cancellationToken);
}
///
public async Task> FindAsync(IClientSessionHandle session, FilterDefinition filter, FindOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(FindAsync), _collection, filter);
return await _collection.FindAsync(session, filter, options, cancellationToken);
}
///
public TProjection FindOneAndDelete(FilterDefinition filter, FindOneAndDeleteOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.FindOneAndDelete(filter, options, cancellationToken);
}
///
public TProjection FindOneAndDelete(IClientSessionHandle session, FilterDefinition filter, FindOneAndDeleteOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.FindOneAndDelete(session, filter, options, cancellationToken);
}
///
public async Task FindOneAndDeleteAsync(FilterDefinition filter, FindOneAndDeleteOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(FindOneAndDeleteAsync), _collection, filter);
return await _collection.FindOneAndDeleteAsync(filter, options, cancellationToken);
}
///
public async Task FindOneAndDeleteAsync(IClientSessionHandle session, FilterDefinition filter, FindOneAndDeleteOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(FindOneAndDeleteAsync), _collection, filter);
return await _collection.FindOneAndDeleteAsync(session, filter, options, cancellationToken);
}
///
public TProjection FindOneAndReplace(FilterDefinition filter, T replacement, FindOneAndReplaceOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.FindOneAndReplace(filter, replacement, options, cancellationToken);
}
///
public TProjection FindOneAndReplace(IClientSessionHandle session, FilterDefinition filter, T replacement, FindOneAndReplaceOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.FindOneAndReplace(session, filter, replacement, options, cancellationToken);
}
///
public async Task FindOneAndReplaceAsync(FilterDefinition filter, T replacement, FindOneAndReplaceOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(FindOneAndReplaceAsync), _collection, filter, document: replacement);
return await _collection.FindOneAndReplaceAsync(filter, replacement, options, cancellationToken);
}
///
public async Task FindOneAndReplaceAsync(IClientSessionHandle session, FilterDefinition filter, T replacement, FindOneAndReplaceOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(FindOneAndReplaceAsync), _collection, filter, document: replacement);
return await _collection.FindOneAndReplaceAsync(session, filter, replacement, options, cancellationToken);
}
///
public TProjection FindOneAndUpdate(FilterDefinition filter, UpdateDefinition update,
FindOneAndUpdateOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.FindOneAndUpdate(filter, update, options, cancellationToken);
}
///
public TProjection FindOneAndUpdate(IClientSessionHandle session, FilterDefinition filter, UpdateDefinition update, FindOneAndUpdateOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.FindOneAndUpdate(session, filter, update, options, cancellationToken);
}
///
public async Task FindOneAndUpdateAsync(FilterDefinition filter, UpdateDefinition update, FindOneAndUpdateOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(FindOneAndUpdateAsync), _collection, filter, update);
return await _collection.FindOneAndUpdateAsync(filter, update, options, cancellationToken);
}
///
public async Task FindOneAndUpdateAsync(IClientSessionHandle session, FilterDefinition filter, UpdateDefinition update, FindOneAndUpdateOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(FindOneAndUpdateAsync), _collection, filter, update);
return await _collection.FindOneAndUpdateAsync(session, filter, update, options, cancellationToken);
}
///
public void InsertOne(T document, InsertOneOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
_collection.InsertOne(document, options, cancellationToken);
}
///
public void InsertOne(IClientSessionHandle session, T document, InsertOneOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
_collection.InsertOne(session, document, options, cancellationToken);
}
///
public async Task InsertOneAsync(T document, CancellationToken cancellationToken)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(InsertOneAsync), _collection, document: document);
await _collection.InsertOneAsync(document, cancellationToken);
}
///
public async Task InsertOneAsync(T document, InsertOneOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(InsertOneAsync), _collection, document: document);
await _collection.InsertOneAsync(document, options, cancellationToken);
}
///
public async Task InsertOneAsync(IClientSessionHandle session, T document, InsertOneOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(InsertOneAsync), _collection, document: document);
await _collection.InsertOneAsync(session, document, options, cancellationToken);
}
///
public void InsertMany(IEnumerable documents, InsertManyOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
_collection.InsertMany(documents, options, cancellationToken);
}
///
public void InsertMany(IClientSessionHandle session, IEnumerable documents, InsertManyOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
_collection.InsertMany(session, documents, options, cancellationToken);
}
///
public async Task InsertManyAsync(IEnumerable documents, InsertManyOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(InsertManyAsync), _collection);
await _collection.InsertManyAsync(documents, options, cancellationToken);
}
///
public async Task InsertManyAsync(IClientSessionHandle session, IEnumerable documents, InsertManyOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(InsertManyAsync), _collection);
await _collection.InsertManyAsync(session, documents, options, cancellationToken);
}
///
public IAsyncCursor MapReduce(BsonJavaScript map, BsonJavaScript reduce, MapReduceOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.MapReduce(map, reduce, options, cancellationToken);
}
///
public IAsyncCursor MapReduce(IClientSessionHandle session, BsonJavaScript map, BsonJavaScript reduce, MapReduceOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.MapReduce(session, map, reduce, options, cancellationToken);
}
///
public async Task> MapReduceAsync(BsonJavaScript map, BsonJavaScript reduce, MapReduceOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(MapReduceAsync), _collection);
return await _collection.MapReduceAsync(map, reduce, options, cancellationToken);
}
///
public async Task> MapReduceAsync(IClientSessionHandle session, BsonJavaScript map, BsonJavaScript reduce, MapReduceOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(MapReduceAsync), _collection);
return await _collection.MapReduceAsync(session, map, reduce, options, cancellationToken);
}
///
public IFilteredMongoCollection OfType() where TDerivedDocument : T
{
return _collection.OfType();
}
///
public ReplaceOneResult ReplaceOne(FilterDefinition filter, T replacement, ReplaceOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.ReplaceOne(filter, replacement, options, cancellationToken);
}
///
public ReplaceOneResult ReplaceOne(FilterDefinition filter, T replacement, UpdateOptions options, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.ReplaceOne(filter, replacement, options, cancellationToken);
}
///
public ReplaceOneResult ReplaceOne(IClientSessionHandle session, FilterDefinition filter, T replacement, ReplaceOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.ReplaceOne(session, filter, replacement, options, cancellationToken);
}
///
public ReplaceOneResult ReplaceOne(IClientSessionHandle session, FilterDefinition filter, T replacement, UpdateOptions options, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.ReplaceOne(session, filter, replacement, options, cancellationToken);
}
///
public async Task ReplaceOneAsync(FilterDefinition filter, T replacement, ReplaceOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(ReplaceOneAsync), _collection, filter, document: replacement);
return await _collection.ReplaceOneAsync(filter, replacement, options, cancellationToken);
}
///
public async Task ReplaceOneAsync(FilterDefinition filter, T replacement, UpdateOptions options, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(ReplaceOneAsync), _collection, filter, document: replacement);
return await _collection.ReplaceOneAsync(filter, replacement, options, cancellationToken);
}
///
public async Task ReplaceOneAsync(IClientSessionHandle session, FilterDefinition filter, T replacement, ReplaceOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(ReplaceOneAsync), _collection, filter, document: replacement);
return await _collection.ReplaceOneAsync(session, filter, replacement, options, cancellationToken);
}
///
public async Task ReplaceOneAsync(IClientSessionHandle session, FilterDefinition filter, T replacement, UpdateOptions options, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(ReplaceOneAsync), _collection, filter, document: replacement);
return await _collection.ReplaceOneAsync(session, filter, replacement, options, cancellationToken);
}
///
public UpdateResult UpdateMany(FilterDefinition filter, UpdateDefinition update, UpdateOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.UpdateMany(filter, update, options, cancellationToken);
}
///
public UpdateResult UpdateMany(IClientSessionHandle session, FilterDefinition filter, UpdateDefinition update, UpdateOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.UpdateMany(session, filter, update, options, cancellationToken);
}
///
public async Task UpdateManyAsync(FilterDefinition filter, UpdateDefinition update, UpdateOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(UpdateManyAsync), _collection, filter, update);
return await _collection.UpdateManyAsync(filter, update, options, cancellationToken);
}
///
public async Task UpdateManyAsync(IClientSessionHandle session, FilterDefinition filter, UpdateDefinition update, UpdateOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(UpdateManyAsync), _collection);
return await _collection.UpdateManyAsync(session, filter, update, options, cancellationToken);
}
///
public UpdateResult UpdateOne(FilterDefinition filter, UpdateDefinition update, UpdateOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.UpdateOne(filter, update, options, cancellationToken);
}
///
public UpdateResult UpdateOne(IClientSessionHandle session, FilterDefinition filter, UpdateDefinition update, UpdateOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.UpdateOne(session, filter, update, options, cancellationToken);
}
///
public async Task UpdateOneAsync(FilterDefinition filter, UpdateDefinition update, UpdateOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(UpdateOneAsync), _collection, filter, update);
return await _collection.UpdateOneAsync(filter, update, options, cancellationToken);
}
///
public async Task UpdateOneAsync(IClientSessionHandle session, FilterDefinition filter, UpdateDefinition update, UpdateOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(UpdateOneAsync), _collection, filter, update);
return await _collection.UpdateOneAsync(session, filter, update, options, cancellationToken);
}
///
public IChangeStreamCursor Watch(PipelineDefinition, TResult> pipeline, ChangeStreamOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.Watch(pipeline, options, cancellationToken);
}
///
public IChangeStreamCursor Watch(IClientSessionHandle session, PipelineDefinition, TResult> pipeline, ChangeStreamOptions options = null!, CancellationToken cancellationToken = default)
{
_upgradeTask.Wait(cancellationToken);
return _collection.Watch(session, pipeline, options, cancellationToken);
}
///
public async Task> WatchAsync(PipelineDefinition, TResult> pipeline, ChangeStreamOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(WatchAsync), _collection);
return await _collection.WatchAsync(pipeline, options, cancellationToken);
}
///
public async Task> WatchAsync(IClientSessionHandle session, PipelineDefinition, TResult> pipeline, ChangeStreamOptions options = null!, CancellationToken cancellationToken = default)
{
await _upgradeTask.WaitAsync(cancellationToken);
using TelemetrySpan span = _tracer.StartMongoDbSpan(nameof(WatchAsync), _collection);
return await _collection.WatchAsync(session, pipeline, options, cancellationToken);
}
///
public IMongoCollection WithReadConcern(ReadConcern readConcern)
{
return _collection.WithReadConcern(readConcern);
}
///
public IMongoCollection WithReadPreference(ReadPreference readPreference)
{
return _collection.WithReadPreference(readPreference);
}
///
public IMongoCollection WithWriteConcern(WriteConcern writeConcern)
{
return _collection.WithWriteConcern(writeConcern);
}
#pragma warning restore CS0618
///
public CollectionNamespace CollectionNamespace => _collection.CollectionNamespace;
///
public IMongoDatabase Database => _collection.Database;
///
public IBsonSerializer DocumentSerializer => _collection.DocumentSerializer;
///
public IMongoIndexManager Indexes => _collection.Indexes;
///
public MongoCollectionSettings Settings => _collection.Settings;
///
public IMongoSearchIndexManager SearchIndexes => _collection.SearchIndexes;
}
}