Exemplo n.º 1
0
        public static void Run(
            [Required] string command,
            [Required] string[] parameters,
            string?grpcHost = null,
            int?grpcPort    = null,
            bool debug      = false)
        {
            if (debug)
            {
                Debugger.Launch();
            }

            using var consoleCancellationSource = new ConsoleCancellationSource();

            Utilities.WithLoggerAsync(async(logger) =>
            {
                var metadataClientConfiguration      = new RoxisClientConfiguration();
                metadataClientConfiguration.GrpcHost = grpcHost ?? metadataClientConfiguration.GrpcHost;
                metadataClientConfiguration.GrpcPort = grpcPort ?? metadataClientConfiguration.GrpcPort;

                await RunClientAsync(
                    logger,
                    new RoxisClientArguments(command, parameters)
                {
                    Client = metadataClientConfiguration
                },
                    consoleCancellationSource.Token);
            }, null).GetAwaiter().GetResult();
        }
        private static MemoizationStoreConfiguration GetInProcMemoizationStoreConfiguration(AbsolutePath cacheRoot, Config config, CasConfig configCore)
        {
            if (config.UseRoxisMetadataStore)
            {
                var roxisClientConfiguration = new RoxisClientConfiguration();

                if (!string.IsNullOrEmpty(config.RoxisMetadataStoreHost))
                {
                    roxisClientConfiguration.GrpcHost = config.RoxisMetadataStoreHost;
                }

                if (config.RoxisMetadataStorePort > 0)
                {
                    roxisClientConfiguration.GrpcPort = config.RoxisMetadataStorePort;
                }

                return(new RoxisMemoizationDatabaseConfiguration()
                {
                    MetadataClientConfiguration = roxisClientConfiguration,
                });
            }
            else if (config.UseRocksDbMemoizationStore)
            {
                return(new RocksDbMemoizationStoreConfiguration()
                {
                    Database = new RocksDbContentLocationDatabaseConfiguration(cacheRoot / "RocksDbMemoizationStore")
                    {
                        CleanOnInitialize = false,
                        GarbageCollectionInterval = TimeSpan.FromSeconds(config.RocksDbMemoizationStoreGarbageCollectionIntervalInSeconds),
                        MetadataGarbageCollectionEnabled = true,
                        MetadataGarbageCollectionMaximumNumberOfEntriesToKeep = config.RocksDbMemoizationStoreGarbageCollectionMaximumNumberOfEntriesToKeep,
                        OnFailureDeleteExistingStoreAndRetry = true,
                        LogsKeepLongTerm = false,
                    },
                });
            }
            else
            {
                var memoConfig = new SQLiteMemoizationStoreConfiguration(cacheRoot)
                {
                    MaxRowCount = config.MaxStrongFingerprints,
                    SingleInstanceTimeoutSeconds = (int)configCore.SingleInstanceTimeoutInSeconds,
                    WaitForLruOnShutdown         = WaitForLruOnShutdown
                };

                memoConfig.Database.BackupDatabase           = config.BackupLKGCache;
                memoConfig.Database.VerifyIntegrityOnStartup = config.CheckCacheIntegrityOnStartup;

                if (!string.IsNullOrEmpty(config.SynchronizationMode))
                {
                    memoConfig.Database.SyncMode = (SynchronizationMode)Enum.Parse(typeof(SynchronizationMode), config.SynchronizationMode, ignoreCase: true);
                }

                return(memoConfig);
            }
        }
        private static MemoizationStoreConfiguration GetInProcMemoizationStoreConfiguration(AbsolutePath cacheRoot, Config config, CasConfig configCore)
        {
            if (config.RoxisEnabled)
            {
                var roxisClientConfiguration = new RoxisClientConfiguration();

                if (!string.IsNullOrEmpty(config.RoxisMetadataStoreHost))
                {
                    roxisClientConfiguration.GrpcHost = config.RoxisMetadataStoreHost;
                }

                if (config.RoxisMetadataStorePort > 0)
                {
                    roxisClientConfiguration.GrpcPort = config.RoxisMetadataStorePort;
                }

                return(new RoxisMemoizationDatabaseConfiguration()
                {
                    MetadataClientConfiguration = roxisClientConfiguration,
                });
            }
            else
            {
                return(new RocksDbMemoizationStoreConfiguration()
                {
                    Database = new RocksDbContentLocationDatabaseConfiguration(cacheRoot / "RocksDbMemoizationStore")
                    {
                        CleanOnInitialize = false,
                        GarbageCollectionInterval = TimeSpan.FromSeconds(config.RocksDbMemoizationStoreGarbageCollectionIntervalInSeconds),
                        MetadataGarbageCollectionEnabled = true,
                        MetadataGarbageCollectionMaximumNumberOfEntriesToKeep = config.RocksDbMemoizationStoreGarbageCollectionMaximumNumberOfEntriesToKeep,
                        OnFailureDeleteExistingStoreAndRetry = true,
                        LogsKeepLongTerm = false,
                    },
                });
            }
        }