Exemplo n.º 1
0
        public IChannel GetOrBuildChannel(Uri address)
        {
            var uri = _lookups == null ? address : _lookups.Resolve(address);

            assertValidTransport(uri);

            if (_channels.TryFind(uri, out var channel))
            {
                return(channel);
            }

            lock (_channelLock)
            {
                if (!_channels.TryFind(uri, out channel))
                {
                    channel   = buildChannel(address);
                    _channels = _channels.AddOrUpdate(address, channel);
                }

                return(channel);
            }
        }
Exemplo n.º 2
0
        public WriterCollection <TWriter> WriterFor(Type messageType)
        {
            if (_modelWriters.TryFind(messageType, out var writer))
            {
                return(writer);
            }

            var modelWriter = compileWriter(messageType);

            _modelWriters = _modelWriters.AddOrUpdate(messageType, modelWriter);

            return(modelWriter);
        }
Exemplo n.º 3
0
        /// <summary>
        /// These mappings should only be used for Linq querying within the SelectMany() body
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        internal IFieldMapping ChildTypeMappingFor(Type type)
        {
            if (_childFieldMappings.TryFind(type, out var mapping))
            {
                return(mapping);
            }

            mapping = new FieldMapping("d.data", type, this);

            _childFieldMappings = _childFieldMappings.AddOrUpdate(type, mapping);

            return(mapping);
        }
Exemplo n.º 4
0
        public ModelReader ReaderFor(string messageType)
        {
            if (_modelReaders.TryFind(messageType, out var reader))
            {
                return(reader);
            }

            var modelReader = compileReader(messageType);

            _modelReaders = _modelReaders.AddOrUpdate(messageType, modelReader);

            return(modelReader);
        }
Exemplo n.º 5
0
        public DocumentProvider <T> StorageFor <T>()
        {
            if (_storage.TryFind(typeof(T), out var stored))
            {
                return(stored.As <DocumentProvider <T> >());
            }

            Tenant.EnsureStorageExists(typeof(T));
            var persistence = _inner.StorageFor <T>();

            _storage = _storage.AddOrUpdate(typeof(T), persistence);

            return(persistence);
        }
Exemplo n.º 6
0
        public ValueTask <IMartenDatabase> FindOrCreateDatabase(string tenantIdOrDatabaseIdentifier)
        {
            if (_databases.TryFind(tenantIdOrDatabaseIdentifier, out var database))
            {
                return(new ValueTask <IMartenDatabase>(database));
            }

            if (_tenants.TryFind(tenantIdOrDatabaseIdentifier, out var tenant))
            {
                return(new ValueTask <IMartenDatabase>(tenant.Database));
            }

            throw new UnknownTenantIdException(tenantIdOrDatabaseIdentifier);
        }
Exemplo n.º 7
0
        internal ICompiledQuerySource GetCompiledQuerySourceFor <TDoc, TOut>(ICompiledQuery <TDoc, TOut> query, IMartenSession session)
        {
            if (_querySources.TryFind(query.GetType(), out var source))
            {
                return(source);
            }

            var plan = QueryCompiler.BuildPlan(session, query, this);

            source        = new CompiledQuerySourceBuilder(plan, this).Build();
            _querySources = _querySources.AddOrUpdate(query.GetType(), source);

            return(source);
        }
Exemplo n.º 8
0
        public static string DetermineTopicName(Type messageType)
        {
            if (_topics.TryFind(messageType, out var topic))
            {
                return(topic);
            }

            topic = messageType.HasAttribute <TopicAttribute>()
                ? messageType.GetAttribute <TopicAttribute>().TopicName
                : messageType.ToMessageTypeName();

            _topics = _topics.AddOrUpdate(messageType, topic);

            return(topic);
        }
Exemplo n.º 9
0
        internal ILiveAggregator <T> AggregatorFor <T>() where T : class
        {
            if (_liveAggregators.TryFind(typeof(T), out var aggregator))
            {
                return((ILiveAggregator <T>)aggregator);
            }

            var source = tryFindProjectionSourceForAggregateType <T>();

            source.AssertValidity();

            aggregator       = source.As <ILiveAggregatorSource <T> >().Build(_options);
            _liveAggregators = _liveAggregators.AddOrUpdate(typeof(T), aggregator);

            return((ILiveAggregator <T>)aggregator);
        }
Exemplo n.º 10
0
        private string locatorForField(string key)
        {
            if (_indexLocators.TryFind(key, out var locator))
            {
                return(locator);
            }

            locator = $"{RawLocator.Replace("->>", "->")} ->> '{key}'";
            if (!_valueIsObject)
            {
                locator = $"CAST({locator} as {_valuePgType})";
            }

            _indexLocators = _indexLocators.AddOrUpdate(key, locator);

            return(locator);
        }
Exemplo n.º 11
0
        internal ILiveAggregator <T> AggregatorFor <T>() where T : class
        {
            if (_liveAggregators.TryFind(typeof(T), out var aggregator))
            {
                return((ILiveAggregator <T>)aggregator);
            }

            if (!_liveAggregateSources.TryGetValue(typeof(T), out var source))
            {
                source = new AggregateProjection <T>();
                source.As <IValidatedProjection>().AssertValidity();
            }

            aggregator       = source.As <ILiveAggregatorSource <T> >().Build(_options);
            _liveAggregators = _liveAggregators.AddOrUpdate(typeof(T), aggregator);

            return((ILiveAggregator <T>)aggregator);
        }
Exemplo n.º 12
0
        public MessageHandler HandlerFor(Type messageType)
        {
            if (_handlers.TryFind(messageType, out var handler))
            {
                return(handler);
            }


            if (_chains.TryFind(messageType, out var chain))
            {
                if (chain.Handler != null)
                {
                    handler = chain.Handler;
                }
                else
                {
                    lock (chain)
                    {
                        if (chain.Handler == null)
                        {
                            var generatedAssembly = new GeneratedAssembly(_generation);

                            chain.AssembleType(_generation, generatedAssembly, Container);

                            new AssemblyGenerator().Compile(generatedAssembly, Container.CreateServiceVariableSource());

                            handler = chain.CreateHandler(Container);
                        }
                        else
                        {
                            handler = chain.Handler;
                        }
                    }
                }

                _handlers = _handlers.AddOrUpdate(messageType, handler);

                return(handler);
            }

            // memoize the "miss"
            _handlers = _handlers.AddOrUpdate(messageType, null);
            return(null);
        }
Exemplo n.º 13
0
        internal ICompiledQuerySource GetCompiledQuerySourceFor <TDoc, TOut>(ICompiledQuery <TDoc, TOut> query, IMartenSession session)
        {
            if (_querySources.TryFind(query.GetType(), out var source))
            {
                return(source);
            }

            if (typeof(TOut).CanBeCastTo <Task>())
            {
                throw InvalidCompiledQueryException.ForCannotBeAsync(query.GetType());
            }

            var plan = QueryCompiler.BuildPlan(session, query, this);

            source        = new CompiledQuerySourceBuilder(plan, this).Build();
            _querySources = _querySources.AddOrUpdate(query.GetType(), source);

            return(source);
        }
Exemplo n.º 14
0
 public string ImHashMap_TryFind()
 {
     _map.TryFind(LookupKey, out var result);
     return(result);
 }
Exemplo n.º 15
0
        public Func <IMessageContext, Task <IContinuation> > ExecutorFor(Type messageType)
        {
            if (_executors.TryFind(messageType, out var executor))
            {
                return(executor);
            }

            var handler = _graph.HandlerFor(messageType);

            // Memoize the null
            if (handler == null)
            {
                _executors = _executors.AddOrUpdate(messageType, null);
                return(null);
            }

            var policy = handler.Chain.Retries.BuildPolicy(_graph.Retries);

            if (policy == null)
            {
                executor = async messageContext =>
                {
                    messageContext.Envelope.Attempts++;

                    try
                    {
                        try
                        {
                            await handler.Handle(messageContext);
                        }
                        catch (Exception e)
                        {
                            messageContext.MarkFailure(e);
                            return(new MoveToErrorQueue(e));
                        }

                        messageContext.Envelope.MarkCompletion(true);

                        return(MessageSucceededContinuation.Instance);
                    }
                    catch (Exception e)
                    {
                        messageContext.MarkFailure(e);
                        return(new MoveToErrorQueue(e));
                    }
                };
            }
            else
            {
                executor = async messageContext =>
                {
                    messageContext.Envelope.Attempts++;
                    messageContext.Envelope.StartTiming();

                    try
                    {
                        var pollyContext = new Context();
                        pollyContext.Store(messageContext);



                        return(await policy.ExecuteAsync(async c =>
                        {
                            var context = c.MessageContext();
                            try
                            {
                                await handler.Handle(context);
                            }
                            catch (Exception e)
                            {
                                messageContext.MarkFailure(e);
                                throw;
                            }

                            messageContext.Envelope.MarkCompletion(true);

                            return MessageSucceededContinuation.Instance;
                        }, pollyContext));
                    }
                    catch (Exception e)
                    {
                        messageContext.MarkFailure(e);
                        return(new MoveToErrorQueue(e));
                    }
                };
            }



            _executors = _executors.AddOrUpdate(messageType, executor);

            return(executor);
        }
Exemplo n.º 16
0
 public void TestHashImp()
 {
     _imHashMap.TryFind("11", out var result);
     _imHashMap.TryFind("2", out result);
 }
Exemplo n.º 17
0
 public bool GetFromImHashMap() =>
 _imMap.TryFind(_key, out var _);