예제 #1
0
 public void Store(UncommittedEventStream eventStream)
 {
     Parallel.ForEach <Guid>(
         eventStream.Select(es => es.EventSourceId).Distinct(),
         (eventSourceId) => SaveEvents(eventSourceId, eventStream.Where(es => es.EventSourceId == eventSourceId))
         );
 }
예제 #2
0
        public void Store(UncommittedEventStream eventStream)
        {
            var commit = new MongoCommit
            {
                CommitId      = eventStream.CommitId,
                EventSourceId = eventStream.SourceId,
                FromVersion   = eventStream.InitialVersion,
                ToVersion     = eventStream.Last().EventSequence,
                Events        = eventStream.Select(e => e.EventIdentifier).ToArray(),
                Processed     = false
            };

            try
            {
                try
                {
                    SafellyInsertCommit(commit);
                    InsertEvents(eventStream);
                    MarkCommitAsProcessed(commit.CommitId);
                }
                catch
                {
                    RemoveUnprocessedCommit(commit.CommitId);
                    throw;
                }
            }
            catch (MongoSafeModeException ex)
            {
                if (ex.Message.Contains(CONCURRENCY_ERROR_CODE))
                {
                    throw new ConcurrencyException(eventStream.SourceId, -1);
                }
            }
        }
        public void Store(UncommittedEventStream eventStream)
        {
            var tapeStream = new AzureTapeStream.AzureTapeStream(eventStream.SourceId.ToString(), Config.Config.Get("Eventing.AzureConnectionString"), Config.Config.Get("Eventing.AzureContainerName"));

            foreach (var record in eventStream.Select(evt => Streamer.SerializeEvent(evt.Payload as ISourcedEvent)))
            {
                tapeStream.Append(record);
            }
        }
예제 #4
0
        public CommittedEventStream Commit(UncommittedEventStream uncommittedEventStream)
        {
            var events                 = uncommittedEventStream.Select(e => e).ToArray();
            var parameters             = new List <OracleParameter>();
            var insertStatementBuilder = new StringBuilder();

            insertStatementBuilder.Append("BEGIN ");
            for (var position = 0; position < events.Length; position++)
            {
                insertStatementBuilder.Append(GetParameterizedInsertStatement(position));
                parameters.AddRange(_eventParameters.BuildFromEvent(position, events[position]));
            }
            insertStatementBuilder.Append(" END;");

            Tuple <int, long>[] returnedIds;

            try
            {
                OpenConnection();
                var transaction = _connection.BeginTransaction();
                try
                {
                    using (var command = _connection.CreateCommand())
                    {
                        command.Transaction = transaction;
                        command.CommandText = insertStatementBuilder.ToString();
                        command.Parameters.AddRange(parameters.ToArray());
                        command.BindByName = true;
                        command.ExecuteNonQuery();

                        returnedIds = ExtractReturnedIds(parameters);
                        transaction.Commit();
                    }
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    throw;
                }
            }
            finally
            {
                EnsureConnectionClosed(_connection);
            }

            PopulateEventId(returnedIds, events);

            var committedEventStream = new CommittedEventStream(uncommittedEventStream.EventSourceId);

            if (events.Any())
            {
                committedEventStream.Append(events);
            }
            return(committedEventStream);
        }
        public void Store(UncommittedEventStream eventStream)
        {
            var sourcePath = string.Format("{0}{1}{2}", BasePath, Path.DirectorySeparatorChar, eventStream.SourceId);

            if (!Directory.Exists(BasePath))
            {
                Directory.CreateDirectory(BasePath);
            }

            var tapeStream = new FileTapeStream.FileTapeStream(sourcePath);

            foreach (var record in eventStream.Select(evt => Streamer.SerializeEvent(evt.Payload as ISourcedEvent)))
            {
                tapeStream.Append(record);
            }
        }
예제 #6
0
        public void Store(UncommittedEventStream eventStream)
        {
            Parallel.ForEach<Guid>(
                eventStream.Select(es => es.EventSourceId).Distinct(),
                (eventSourceId) => SaveEvents(eventSourceId, eventStream.Where(es => es.EventSourceId == eventSourceId))
            );

        }
        public void Store(UncommittedEventStream eventStream)
        {
            var sourcePath = string.Format("{0}{1}{2}", BasePath, Path.DirectorySeparatorChar, eventStream.SourceId);

            if (!Directory.Exists(BasePath))
            {
                Directory.CreateDirectory(BasePath);
            }

            var tapeStream = new FileTapeStream.FileTapeStream(sourcePath);

            foreach (var record in eventStream.Select(evt => Streamer.SerializeEvent(evt.Payload as ISourcedEvent)))
            {
                tapeStream.Append(record);
            }
        }
        public void Store(UncommittedEventStream eventStream)
        {
            var tapeStream = new AzureTapeStream.AzureTapeStream(eventStream.SourceId.ToString(), Settings.Default.AzureConnectionString, Settings.Default.AzureContainerName);

            foreach (var record in eventStream.Select(evt => Streamer.SerializeEvent(evt.Payload as ISourcedEvent)))
            {
                tapeStream.Append(record);
            }
        }
예제 #9
0
        public void Store(UncommittedEventStream eventStream)
        {
            var commit = new MongoCommit
            {
                CommitId = eventStream.CommitId,
                EventSourceId = eventStream.SourceId,
                FromVersion = eventStream.InitialVersion,
                ToVersion = eventStream.Last().EventSequence,
                Events = eventStream.Select(e=>e.EventIdentifier).ToArray(),
                Processed = false
            };

            try
            {
                try
                {
                    SafellyInsertCommit(commit);
                    InsertEvents(eventStream);
                    MarkCommitAsProcessed(commit.CommitId);
                }
                catch
                {
                    RemoveUnprocessedCommit(commit.CommitId);
                    throw;
                }
            }
            catch (MongoSafeModeException ex)
            {
                if (ex.Message.Contains(CONCURRENCY_ERROR_CODE))
                    throw new ConcurrencyException(eventStream.SourceId, -1);
            }
        }
        public void Store(UncommittedEventStream eventStream)
        {
            var commit = new MongoCommit
            {
                CommitId = eventStream.CommitId,
                Events = eventStream.Select(evt => new MongoStoredEvent
                {
                    Data = evt.Payload,
                    EventIdentifier = evt.EventIdentifier,
                    EventSequence = evt.EventSequence,
                    EventSourceId = evt.EventSourceId,
                    EventTimeStamp = evt.EventTimeStamp,
                    Version = evt.EventVersion
                }).ToList()
            };

            _mongoServer.Connect();

            var db = _mongoServer.GetDatabase(_databaseName);
            var coll = db.GetCollection<MongoCommit>(_collectionName);

            coll.Save(commit, _safeMode);

            _mongoServer.Disconnect();
        }