示例#1
0
        public BasePartition(LeoEngineConfiguration engineConfig, long partitionId, ItemConfiguration config, Func <Task <IEncryptor> > encryptorFactory, IMemoryCache cache, string cachePrefix)
        {
            _store        = new SecureStore(engineConfig.BaseStore, engineConfig.BackupQueue, engineConfig.IndexQueue, engineConfig.Compressor);
            _partitionId  = partitionId;
            _config       = config;
            _engineConfig = engineConfig;

            _options = SecureStoreOptions.KeepDeletes;
            if (config.DoBackup)
            {
                _options = _options | SecureStoreOptions.Backup;
            }
            if (config.Indexer != null)
            {
                _options = _options | SecureStoreOptions.Index;
            }
            if (config.DoCompress)
            {
                _options = _options | SecureStoreOptions.Compress;
            }

            _encryptor = new Lazy <Task <IEncryptor> >(async() => config.DoEncrypt ? await encryptorFactory().ConfigureAwait(false) : null, true);

            string container = partitionId.ToString(CultureInfo.InvariantCulture);

            _luceneIndex = new Lazy <LuceneIndex>(() => engineConfig.IndexStore == null ? null : new LuceneIndex(new SecureStore(engineConfig.IndexStore, null, null, engineConfig.Compressor), container, config.BasePath, _encryptor, cache, $"{cachePrefix}::{partitionId}"), true);
        }
示例#2
0
 public ObjectPartition(LeoEngineConfiguration engineConfig, long partitionId, ItemConfiguration config, Func <Task <IEncryptor> > encFactory, IMemoryCache cache, string cachePrefix)
     : base(engineConfig, partitionId, config, encFactory, cache, $"{cachePrefix}::Object")
 {
     _idGenerator = new Lazy <UniqueIdGenerator>(() =>
     {
         var loc = new StoreLocation(partitionId.ToString(CultureInfo.InvariantCulture), Path.Combine(config.BasePath, engineConfig.UniqueIdGeneratorPath));
         return(new UniqueIdGenerator(engineConfig.BaseStore, loc, 5));
     }, true);
 }
示例#3
0
        public LeoEngine(LeoEngineConfiguration config)
        {
            _config         = config;
            _disposables    = new List <IDisposable>();
            _backupListener = config.BackupStore != null && config.BackupQueue != null ? new BackupListener(config.BackupQueue, config.BaseStore, config.BackupStore) : null;
            _indexListener  = config.IndexQueue != null ? new IndexListener(config.IndexQueue, config.TypeResolver, config.TypeNameResolver) : null;
            _cache          = config.MemoryCache ?? new MemoryCache(new MemoryCacheOptions());
            _cachePolicy    = c =>
            {
                c.Priority          = CacheItemPriority.Normal;
                c.SlidingExpiration = TimeSpan.FromHours(1);
                c.RegisterPostEvictionCallback((key, value, reason, state) =>
                {
                    if (value is IDisposable disp)
                    {
                        disp.Dispose();
                    }
                });
            };

            _baseName = "LeoEngine::" + config.UniqueName + "::";
            _composer = new Lazy <IRecordSearchComposer>(() => config.TableStore == null ? null : new RecordSearchComposer(config.TableStore), true);

            if (_indexListener != null)
            {
                if (config.Objects == null)
                {
                    throw new ArgumentNullException("You have not initialised any objects");
                }

                if (config.Objects.Select(o => o.BasePath).Distinct().Count() != config.Objects.Count())
                {
                    throw new ArgumentException("Must have unique base paths accross all objects");
                }

                foreach (var obj in config.Objects.Where(o => o.Type != null && o.Indexer != null))
                {
                    _indexListener.RegisterTypeIndexer(obj.Type, obj.Indexer);
                    if (obj.IndexerAllowFallbackToBasePath)
                    {
                        _indexListener.RegisterPathIndexer(obj.BasePath, obj.Indexer);
                    }
                }

                foreach (var obj in config.Objects.Where(o => o.Type == null && o.Indexer != null))
                {
                    _indexListener.RegisterPathIndexer(obj.BasePath, obj.Indexer);
                }
            }
        }
示例#4
0
        public BasePartition(LeoEngineConfiguration engineConfig, long partitionId, ItemConfiguration config, Func <Task <IEncryptor> > encryptorFactory)
        {
            _store        = new SecureStore(engineConfig.BaseStore, engineConfig.BackupQueue, engineConfig.IndexQueue, engineConfig.SecondaryIndexQueue, engineConfig.Compressor);
            _partitionId  = partitionId;
            _config       = config;
            _engineConfig = engineConfig;

            _options = SecureStoreOptions.KeepDeletes;
            if (config.DoBackup)
            {
                _options = _options | SecureStoreOptions.Backup;
            }
            if (config.Indexer != null)
            {
                _options = _options | SecureStoreOptions.Index;
            }
            if (config.DoCompress)
            {
                _options = _options | SecureStoreOptions.Compress;
            }

            _encryptor = new Lazy <Task <IEncryptor> >(async() => config.DoEncrypt ? await encryptorFactory() : null, true);
        }
示例#5
0
 public DocumentPartition(LeoEngineConfiguration engineConfig, long partitionId, ItemConfiguration config, Func <Task <IEncryptor> > encFactory)
     : base(engineConfig, partitionId, config, encFactory)
 {
 }
示例#6
0
 public DocumentPartition(LeoEngineConfiguration engineConfig, long partitionId, ItemConfiguration config, Func <Task <IEncryptor> > encFactory, IMemoryCache cache, string cachePrefix)
     : base(engineConfig, partitionId, config, encFactory, cache, $"{cachePrefix}::Document")
 {
 }