/// <inheritdoc />
        public RocksDbContentLocationDatabase(IClock clock, RocksDbContentLocationDatabaseConfiguration configuration, Func <IReadOnlyList <MachineId> > getInactiveMachines)
            : base(clock, configuration, getInactiveMachines)
        {
            Contract.Requires(configuration.FlushPreservePercentInMemory >= 0 && configuration.FlushPreservePercentInMemory <= 1);
            Contract.Requires(configuration.FlushDegreeOfParallelism > 0);
            Contract.Requires(configuration.MetadataGarbageCollectionMaximumNumberOfEntriesToKeep > 0);

            _configuration      = configuration;
            _activeSlotFilePath = (_configuration.StoreLocation / ActiveStoreSlotFileName).ToString();
        }
Example #2
0
        public RocksDbContentMetadataDatabase(IClock clock, RocksDbContentLocationDatabaseConfiguration configuration)
            : base(clock, configuration, () => Array.Empty <MachineId>())
        {
            Contract.Requires(configuration.MetadataGarbageCollectionMaximumNumberOfEntriesToKeep > 0);

            _configuration      = configuration;
            _activeSlotFilePath = (_configuration.StoreLocation / ActiveStoreSlotFileName).ToString();

            // this is a hacky way to convince the compiler that the field is initialized.
            // Technically, the field is nullable, but keeping it as nullable causes more issues than giving us benefits.
            _keyValueStore = null !;
        }
Example #3
0
        /// <inheritdoc />
        public RocksDbContentLocationDatabase(IClock clock, RocksDbContentLocationDatabaseConfiguration configuration, Func <IReadOnlyList <MachineId> > getInactiveMachines)
            : base(clock, configuration, getInactiveMachines)
        {
            Contract.Requires(configuration.FlushPreservePercentInMemory >= 0 && configuration.FlushPreservePercentInMemory <= 1);
            Contract.Requires(configuration.FlushDegreeOfParallelism > 0);
            Contract.Requires(configuration.MetadataGarbageCollectionMaximumNumberOfEntriesToKeep > 0);

            _configuration      = configuration;
            _activeSlotFilePath = (_configuration.StoreLocation / ActiveStoreSlotFileName).ToString();

            if (_configuration.LogsBackupPath != null)
            {
                _logManager = new RocksDbLogsManager(clock, new PassThroughFileSystem(), _configuration.LogsBackupPath, _configuration.LogsRetention);
            }
        }
Example #4
0
        public static RocksDbContentLocationDatabaseConfiguration FromDistributedContentSettings(
            DistributedContentSettings settings,
            AbsolutePath databasePath,
            AbsolutePath?logsBackupPath,
            bool logsKeepLongTerm)
        {
            var configuration = new RocksDbContentLocationDatabaseConfiguration(databasePath)
            {
                LogsKeepLongTerm = logsKeepLongTerm,
                UseContextualEntryOperationLogging = settings.UseContextualEntryDatabaseOperationLogging,
                TraceTouches = settings.TraceTouches,
                MetadataGarbageCollectionEnabled = settings.EnableDistributedCache,
                LogsBackupPath = logsBackupPath,
            };

            ApplyIfNotNull(settings.ContentLocationDatabaseGcIntervalMinutes, v => configuration.GarbageCollectionInterval             = TimeSpan.FromMinutes(v));
            ApplyIfNotNull(settings.ContentLocationDatabaseGarbageCollectionConcurrent, v => configuration.GarbageCollectionConcurrent = v);
            ApplyEnumIfNotNull <MetadataGarbageCollectionStrategy>(settings.ContentLocationDatabaseMetadataGarbageCollectionStrategy, nameof(settings.ContentLocationDatabaseMetadataGarbageCollectionStrategy), v => configuration.MetadataGarbageCollectionStrategy = v);
            ApplyIfNotNull(settings.ContentLocationDatabaseMetadataGarbageCollectionMaximumSizeMb, v => configuration.MetadataGarbageCollectionMaximumSizeMb = v);
            ApplyIfNotNull(settings.MaximumNumberOfMetadataEntriesToStore, v => configuration.MetadataGarbageCollectionMaximumNumberOfEntriesToKeep          = v);

            ApplyIfNotNull(settings.ContentLocationDatabaseOpenReadOnly, v => configuration.OpenReadOnly = v && !settings.IsMasterEligible);

            ApplyEnumIfNotNull <Compression>(settings.ContentLocationDatabaseCompression, v => configuration.Compression = v);

            if (settings.ContentLocationDatabaseLogsBackupEnabled)
            {
                configuration.LogsBackupPath = logsBackupPath;
            }
            ApplyIfNotNull(settings.ContentLocationDatabaseLogsBackupRetentionMinutes, v => configuration.LogsRetention = TimeSpan.FromMinutes(v));

            ApplyIfNotNull(settings.ContentLocationDatabaseEnumerateSortedKeysFromStorageBufferSize, v => configuration.EnumerateSortedKeysFromStorageBufferSize = v);
            ApplyIfNotNull(settings.ContentLocationDatabaseEnumerateEntriesWithSortedKeysFromStorageBufferSize, v => configuration.EnumerateEntriesWithSortedKeysFromStorageBufferSize = v);

            return(configuration);
        }
 public RocksDbContentMetadataStore(
     IClock clock,
     RocksDbContentLocationDatabaseConfiguration configuration)
 {
     _database = new RocksDbContentMetadataDatabase(clock, configuration);
 }
Example #6
0
 /// <inheritdoc />
 public RocksDbContentLocationDatabase(IClock clock, RocksDbContentLocationDatabaseConfiguration configuration, Func <IReadOnlyList <MachineId> > getInactiveMachines)
     : base(clock, configuration, getInactiveMachines)
 {
     _configuration      = configuration;
     _activeSlotFilePath = (_configuration.StoreLocation / ActiveStoreSlotFileName).ToString();
 }