Esempio n. 1
0
 public static SessionOptions ForDatabase(IMartenDatabase @database)
 {
     return(new SessionOptions
     {
         Tenant = new Tenant(Tenancy.DefaultTenantId, @database), AllowAnyTenant = true, OwnsConnection = true, OwnsTransactionLifecycle = true, Tracking = DocumentTracking.None
     });
 }
Esempio n. 2
0
        public async ValueTask <EventRangeGroup> GroupEvents(DocumentStore store, IMartenDatabase database, EventRange range,
                                                             CancellationToken cancellationToken)
        {
            var groups = await GroupEventRange(store, database, range, cancellationToken).ConfigureAwait(false);

            return(new TenantSliceRange <TDoc, TId>(store, this, range, groups, cancellationToken));
        }
Esempio n. 3
0
        internal IEnumerable <IFeatureSchema> AllActiveFeatures(IMartenDatabase database)
        {
            yield return(SystemFunctions);

            var mappings = _documentMappings.Value
                           .Enumerate().Select(x => x.Value)
                           .OrderBy(x => x.DocumentType.Name)
                           .TopologicalSort(m => m.ReferencedTypes()
                                            .Select(MappingFor));

            foreach (var mapping in mappings)
            {
                yield return(mapping.Schema);
            }

            if (SequenceIsRequired())
            {
                yield return(database.Sequences);
            }

            if (_options.Events.As <EventGraph>().IsActive(_options))
            {
                yield return(_options.EventGraph);
            }

            var custom = _features.Values
                         .Where(x => x.GetType().Assembly != GetType().Assembly).ToArray();

            foreach (var featureSchema in custom)
            {
                yield return(featureSchema);
            }
        }
Esempio n. 4
0
        public override async ValueTask SkipEventSequence(long eventSequence, IMartenDatabase database)
        {
            reset();
            Range.SkipEventSequence(eventSequence);

            Groups = await _runtime.GroupEventRange(_store, database, Range, Cancellation).ConfigureAwait(false);
        }
Esempio n. 5
0
        public Publisher(IDocumentStore store, IMartenDatabase database, StatusBoard board)
        {
            _store    = store;
            _database = database;
            _board    = board;

            var storeName = store.GetType() == typeof(DocumentStore) ? "Marten" : store.GetType().NameInCode();

            _name = $"{storeName}:{_database.Identifier}";
        }
        public TenantedEventRangeGroup(IDocumentStore store, IMartenDatabase daemonDatabase, IProjection projection,
                                       EventRange range,
                                       CancellationToken shardCancellation) : base(range, shardCancellation)
        {
            _store          = (DocumentStore)store;
            _daemonDatabase = daemonDatabase;
            _projection     = projection ?? throw new ArgumentNullException(nameof(projection));

            buildGroups();
        }
Esempio n. 7
0
        public HiloSequence(IMartenDatabase database, StoreOptions options, string entityName, HiloSettings settings)
        {
            _database   = database;
            _options    = options;
            _entityName = entityName;
            CurrentHi   = -1;
            CurrentLo   = 1;
            MaxLo       = settings.MaxLo;

            _settings = settings;
        }
Esempio n. 8
0
        public async Task ApplySkipAsync(SkipEvent skip, IMartenDatabase database)
        {
            if (Group != null)
            {
                await Group.SkipEventSequence(skip.Event.Sequence, database).ConfigureAwait(false);

                // You have to reset the CancellationToken for the group
                Group.Reset();
                Cancellation = Group.Cancellation;
            }

            // Basically saying that the attempts start over when we skip
            Attempts = 0;
            Delay    = default;
        }
Esempio n. 9
0
 public void TruncateDocumentStorage(IMartenDatabase database)
 {
     try
     {
         var sql = "truncate {0} cascade".ToFormat(TableName.QualifiedName);
         database.RunSql(sql);
     }
     catch (PostgresException e)
     {
         if (!e.Message.Contains("does not exist"))
         {
             throw;
         }
     }
 }
Esempio n. 10
0
        public async Task TruncateDocumentStorageAsync(IMartenDatabase database)
        {
            var sql = "truncate {0} cascade".ToFormat(TableName.QualifiedName);

            try
            {
                await database.RunSqlAsync(sql).ConfigureAwait(false);
            }
            catch (PostgresException e)
            {
                if (!e.Message.Contains("does not exist"))
                {
                    throw;
                }
            }
        }
Esempio n. 11
0
        public EventFetcher(IDocumentStore store, IMartenDatabase database, ISqlFragment[] filters)
        {
            _store    = store;
            _database = database;
            _filters  = filters;

            using var session = querySession();
            _storage          = session.EventStorage();

            var schemaName = store.Options.Events.DatabaseSchemaName;

            var builder = new CommandBuilder();

            builder.Append($"select {_storage.SelectFields().Select(x => "d." + x).Join(", ")}, s.type as stream_type");
            builder.Append($" from {schemaName}.mt_events as d inner join {schemaName}.mt_streams as s on d.stream_id = s.id");

            if (_store.Options.Events.TenancyStyle == TenancyStyle.Conjoined)
            {
                builder.Append(" and d.tenant_id = s.tenant_id");
            }

            var parameters = builder.AppendWithParameters($" where d.seq_id > ? and d.seq_id <= ?");

            _floor              = parameters[0];
            _ceiling            = parameters[1];
            _floor.NpgsqlDbType = _ceiling.NpgsqlDbType = NpgsqlDbType.Bigint;

            foreach (var filter in filters)
            {
                builder.Append(" and ");
                filter.Apply(builder);
            }

            builder.Append(" order by d.seq_id");

            _command        = builder.Compile();
            _aggregateIndex = _storage.SelectFields().Length;
        }
 public override ValueTask SkipEventSequence(long eventSequence, IMartenDatabase database)
 {
     Range.SkipEventSequence(eventSequence);
     Groups.Clear();
     buildGroups();
     return(default);
Esempio n. 13
0
 public async ValueTask <IReadOnlyList <TenantSliceGroup <TDoc, TId> > > GroupEventRange(DocumentStore store,
                                                                                         IMartenDatabase database, EventRange range, CancellationToken cancellation)
 {
     await using var session = store.OpenSession(SessionOptions.ForDatabase(database));
     return(await Slicer.SliceAsyncEvents(session, range.Events).ConfigureAwait(false));
 }
Esempio n. 14
0
 public EventFetcherException(ShardName name, IMartenDatabase martenDatabase, Exception innerException) : base($"Failure while trying to load events for projection shard '{name}@{martenDatabase.Identifier}'", innerException)
 {
 }
Esempio n. 15
0
        protected override ValueTask <EventRangeGroup> groupEvents(DocumentStore store, IMartenDatabase daemonDatabase, EventRange range,
                                                                   CancellationToken cancellationToken)
        {
            _runtime ??= BuildRuntime(store);

            return(_runtime.GroupEvents(store, daemonDatabase, range, cancellationToken));
        }
Esempio n. 16
0
        async ValueTask <EventRangeGroup> IAggregationRuntime.GroupEvents(DocumentStore store, IMartenDatabase database, EventRange range,
                                                                          CancellationToken cancellationToken)
        {
            using var session = store.OpenSession(SessionOptions.ForDatabase(database));
            var groups = await Slicer.SliceAsyncEvents(session, range.Events).ConfigureAwait(false);

            return(new TenantSliceRange <TDoc, TId>(store, this, range, groups, cancellationToken));
        }
Esempio n. 17
0
 public abstract TId AssignIdentity(T document, string tenantId, IMartenDatabase database);
 public Task TruncateDocumentStorageAsync(IMartenDatabase database)
 {
     return(database.RunSqlAsync(
                $"delete from {_parent.TableName.QualifiedName} where {SchemaConstants.DocumentTypeColumn} = '{_mapping.Alias}'"));
 }
Esempio n. 19
0
 public StorageCheckingProviderGraph(IMartenDatabase tenant, IProviderGraph inner)
 {
     Tenant = tenant;
     _inner = inner;
 }
Esempio n. 20
0
 public override ValueTask SkipEventSequence(long eventSequence, IMartenDatabase database)
 {
     throw new NotSupportedException();
 }
Esempio n. 21
0
 public void TruncateDocumentStorage(IMartenDatabase database)
 {
     database.RunSql($"truncate table {Events.DatabaseSchemaName}.mt_streams cascade");
 }
Esempio n. 22
0
 public HotColdCoordinator(IMartenDatabase database, DaemonSettings settings, ILogger logger)
 {
     _settings = settings;
     _logger   = logger;
     _database = database;
 }
 public AutoOpenSingleQueryRunner(IMartenDatabase database)
 {
     _database = database;
 }
Esempio n. 24
0
 public ValueTask <EventRangeGroup> GroupEvents(DocumentStore store, IMartenDatabase daemonDatabase, EventRange range,
                                                CancellationToken cancellationToken)
 {
     return(new ValueTask <EventRangeGroup>(new TenantedEventRangeGroup(store, daemonDatabase, _projection, range, cancellationToken)));
 }
Esempio n. 25
0
 public abstract ValueTask SkipEventSequence(long eventSequence, IMartenDatabase database);
Esempio n. 26
0
        public void TruncateDocumentStorage(IMartenDatabase database)
        {
            var sql = "truncate {0} cascade".ToFormat(TableName.QualifiedName);

            database.RunSql(sql);
        }
Esempio n. 27
0
 protected override ValueTask <EventRangeGroup> groupEvents(DocumentStore store, IMartenDatabase daemonDatabase, EventRange range,
                                                            CancellationToken cancellationToken)
 {
     return(new ValueTask <EventRangeGroup>(new TenantedEventRangeGroup(store, daemonDatabase, _generatedProjection.Value, range, cancellationToken)));
 }
Esempio n. 28
0
        public Task TruncateDocumentStorageAsync(IMartenDatabase database)
        {
            var sql = "truncate {0} cascade".ToFormat(TableName.QualifiedName);

            return(database.RunSqlAsync(sql));
        }
Esempio n. 29
0
 public Task TruncateDocumentStorageAsync(IMartenDatabase database)
 {
     return(database.RunSqlAsync($"truncate table {Events.DatabaseSchemaName}.mt_streams cascade"));
 }
 public void TruncateDocumentStorage(IMartenDatabase database)
 {
     database.RunSql(
         $"delete from {_parent.TableName.QualifiedName} where {SchemaConstants.DocumentTypeColumn} = '{_mapping.Alias}'");
 }