コード例 #1
0
ファイル: Version.cs プロジェクト: RockNHawk/IronLeveldb
            public Builder(IIronLeveldbStorge storge, IronLeveldbOptions options, Version baseVersion)
            {
                _storge              = storge;
                _options             = options;
                _baseVersion         = baseVersion;
                _internalKeyComparer = new InternalKeyComparer(options.Comparer);

                _levels = Enumerable.Range(0, Config.NumLevels)
                          .Select(_ => new LevelState(_internalKeyComparer)).ToArray();
            }
コード例 #2
0
ファイル: Version.cs プロジェクト: RockNHawk/IronLeveldb
        private Version(IIronLeveldbStorge storge, IronLeveldbOptions options)
        {
            _storge              = storge;
            _options             = options;
            _internalKeyComparer = new InternalKeyComparer(options.Comparer);
            _internalComparer    = Comparer <InternalIByteArrayKeyValuePair> .Create(
                (a, b) => _internalKeyComparer.Compare(a.InternalKey, b.InternalKey));

            _cacheId = IdGenerator.NewId();

            _cache = options.TableCache;
        }
コード例 #3
0
        public static IIronLeveldb Build(this IIronLeveldbStorge storge, IronLeveldbOptions options)
        {
            var manifestContent = storge.GetCurrentDescriptorContent();

            // TODO base version
            var b = new Version.Builder(storge, options, null);

            using (var manifestStream = manifestContent.AsStream())
            {
                foreach (var stream in new RecoverLogRecordsStream(manifestStream))
                {
                    var versionEdit = VersionEdit.DecodeFrom(stream);

                    b.With(versionEdit);
                }
            }

            var current = b.Build();

            return(new IronLeveldbStub(options, current, () =>
            {
                var es = new List <Exception>();
                try
                {
                    storge.Dispose();
                }
                catch (Exception e)
                {
                    es.Add(e);
                }

                try
                {
                    current.Dispose();
                }
                catch (Exception e)
                {
                    es.Add(e);
                }

                if (es.Count > 1)
                {
                    throw new AggregateException(es);
                }

                if (es.Count == 1)
                {
                    throw es.First();
                }
            }));
        }
コード例 #4
0
 public static IIronLeveldb Build(this IIronLeveldbStorge storge)
 {
     return(Build(storge, new IronLeveldbOptions()));
 }