public void WriteSnapshot(LogWriter logWriter, VersionSet versionSet)
		{
			var edit = new VersionEdit();
			AddMetadata(edit, storageContext.Options);
			AddCompactionPointers(edit, versionSet);
			AddFiles(edit, versionSet);

			edit.EncodeTo(logWriter);
		}
		private static void AddCompactionPointers(VersionEdit edit, VersionSet versionSet)
		{
			for (int level = 0; level < Config.NumberOfLevels; level++)
			{
				var compactionPointer = versionSet.CompactionPointers[level];
				if (!compactionPointer.IsEmpty())
				{
					edit.SetCompactionPointer(level, new InternalKey(compactionPointer));
				}
			}
		}
		private static void AddFiles(VersionEdit edit, VersionSet versionSet)
		{
			for (int level = 0; level < Config.NumberOfLevels; level++)
			{
				var files = versionSet.Current.Files[level];
				foreach (var file in files)
				{
					edit.AddFile(level, file);
				}
			}
		}
		public Snapshot CreateNewSnapshot(VersionSet versionSet)
		{
			var snapshot = new Snapshot
				               {
					               Sequence = versionSet.LastSequence
				               };

			snapshots.TryAdd(snapshot, null);

			return snapshot;
		}
		public StorageState(string name, StorageOptions options)
		{
			_perfCounters = new PerfCounters(name);
			_cancellationTokenSource = new CancellationTokenSource();
			CancellationToken = _cancellationTokenSource.Token;
			Options = options;
			InternalKeyComparator = new InternalKeyComparator(options.Comparator);
			DatabaseName = name;
			Lock = new AsyncLock();
			FileSystem = new FileSystem(DatabaseName);
			MemTable = new MemTable(this);
			TableCache = new TableCache(this);
			VersionSet = new VersionSet(this);
			Compactor = new BackgroundCompactor(this);
			Snapshooter = new Snapshooter(this);
		}
Esempio n. 6
0
		public Version(StorageState storageContext, VersionSet versionSet)
			: this(storageContext)
		{
			VersionSet = versionSet;
		}