コード例 #1
0
        public MongoPersistenceEngine(
            IMongoDatabase store,
            IDocumentSerializer serializer,
            MongoPersistenceOptions options)
        {
            _store            = store ?? throw new ArgumentNullException(nameof(store));
            _serializer       = serializer ?? throw new ArgumentNullException(nameof(serializer));
            _options          = options ?? throw new ArgumentNullException(nameof(options));
            _systemBucketName = options.SystemBucketName;

            // set config options
            _commitSettings           = _options.GetCommitSettings();
            _snapshotSettings         = _options.GetSnapshotSettings();
            _streamSettings           = _options.GetStreamSettings();
            _insertCommitWriteConcern = _options.GetInsertCommitWriteConcern();
        }
        public MongoPersistenceEngine(MongoDatabase store, IDocumentSerializer serializer, MongoPersistenceOptions options)
        {
            if (store == null)
            {
                throw new ArgumentNullException("store");
            }

            if (serializer == null)
            {
                throw new ArgumentNullException("serializer");
            }

            if (options == null)
            {
                throw new ArgumentNullException("options");
            }

            _store      = store;
            _serializer = serializer;
            _options    = options;

            // set config options
            _commitSettings           = _options.GetCommitSettings();
            _snapshotSettings         = _options.GetSnapshotSettings();
            _streamSettings           = _options.GetStreamSettings();
            _insertCommitWriteConcern = _options.GetInsertCommitWriteConcern();

            _getLastCheckPointNumber = () => TryMongo(() =>
            {
                var max = PersistedCommits
                          .FindAll()
                          .SetFields(Fields.Include(MongoCommitFields.CheckpointNumber))
                          .SetSortOrder(SortBy.Descending(MongoCommitFields.CheckpointNumber))
                          .SetLimit(1)
                          .FirstOrDefault();

                return(max != null ? max[MongoCommitFields.CheckpointNumber].AsInt64 : 0L);
            });

            _getNextCheckpointNumber = () => new LongCheckpoint(_getLastCheckPointNumber() + 1L);

            _updateScript   = new BsonJavaScript("function (x){ return insertCommit(x);}");
            _checkpointZero = new LongCheckpoint(0);
        }
        public MongoPersistenceEngine(
            IMongoDatabase store,
            IDocumentSerializer serializer,
            MongoPersistenceOptions options)
        {
            var db = store ?? throw new ArgumentNullException(nameof(store));

            _serializer       = serializer ?? throw new ArgumentNullException(nameof(serializer));
            _options          = options ?? throw new ArgumentNullException(nameof(options));
            _systemBucketName = options.SystemBucketName;

            // set config options
            var _commitSettings           = _options.GetCommitSettings();
            var _snapshotSettings         = _options.GetSnapshotSettings();
            var _streamSettings           = _options.GetStreamSettings();
            var _insertCommitWriteConcern = _options.GetInsertCommitWriteConcern();

            // from the docs: IMongoCollection is thread safe and safe to be stored globally
            PersistedCommits     = db.GetCollection <BsonDocument>("Commits", _commitSettings).WithWriteConcern(_insertCommitWriteConcern);
            PersistedStreamHeads = db.GetCollection <BsonDocument>("Streams", _streamSettings);
            PersistedSnapshots   = db.GetCollection <BsonDocument>("Snapshots", _snapshotSettings);
        }