internal void DistributedService ( [Description("Path to DistributedContentSettings file")] string settingsPath, [Description("Cache name")] string cacheName, [Description("Cache root path")] string cachePath, [DefaultValue((int)ServiceConfiguration.GrpcDisabledPort), Description(GrpcPortDescription)] int grpcPort, [Description("Name of the memory mapped file used to share GRPC port. 'CASaaS GRPC port' if not specified.")] string grpcPortFileName, [DefaultValue(null), Description("Writable directory for service operations (use CWD if null)")] string dataRootPath, [DefaultValue(null), Description("Identifier for the stamp this service will run as")] string stampId, [DefaultValue(null), Description("Identifier for the ring this service will run as")] string ringId, [DefaultValue(Constants.OneMB), Description("Max size quota in MB")] int maxSizeQuotaMB, [DefaultValue(false)] bool debug, [DefaultValue(false), Description("Whether or not GRPC is used for file copies")] bool useDistributedGrpc, [DefaultValue(false), Description("Whether or not GZip is used for GRPC file copies")] bool useCompressionForCopies, [DefaultValue(null), Description("Buffer size for streaming GRPC copies")] int? bufferSizeForGrpcCopies, [DefaultValue(null), Description("Files greater than this size are compressed if compression is used")] int? gzipBarrierSizeForGrpcCopies ) { Initialize(); if (debug) { System.Diagnostics.Debugger.Launch(); } try { Validate(); var dcs = JsonConvert.DeserializeObject<DistributedContentSettings>(File.ReadAllText(settingsPath)); var host = new HostInfo(stampId, ringId, new List<string>()); if (grpcPort == 0) { grpcPort = Helpers.GetGrpcPortFromFile(_logger, grpcPortFileName); } var arguments = CreateDistributedCacheServiceArguments( copier: useDistributedGrpc ? new GrpcFileCopier( context: new Interfaces.Tracing.Context(_logger), grpcPort: grpcPort, maxGrpcClientCount: dcs.MaxGrpcClientCount, maxGrpcClientAgeMinutes: dcs.MaxGrpcClientAgeMinutes, grpcClientCleanupDelayMinutes: dcs.GrpcClientCleanupDelayMinutes, useCompression: useCompressionForCopies, bufferSize: bufferSizeForGrpcCopies) : (IAbsolutePathFileCopier)new DistributedCopier(), pathTransformer: useDistributedGrpc ? new GrpcDistributedPathTransformer() : (IAbsolutePathTransformer)new DistributedPathTransformer(), dcs: dcs, host: host, cacheName: cacheName, cacheRootPath: cachePath, grpcPort: (uint)grpcPort, maxSizeQuotaMB: maxSizeQuotaMB, dataRootPath: dataRootPath, ct: _cancellationToken, bufferSizeForGrpcCopies: bufferSizeForGrpcCopies, gzipBarrierSizeForGrpcCopies: gzipBarrierSizeForGrpcCopies); DistributedCacheServiceFacade.RunAsync(arguments).GetAwaiter().GetResult(); } catch (Exception e) { Console.WriteLine(e); throw; } }
internal void PutFile ( [Description("Cache root directory path (using in-process cache)")] string cachePath, [Description("Cache name (using cache service)")] string cacheName, [Required, Description("Path to destination file")] string path, [Description(HashTypeDescription)] string hashType, [DefaultValue(FileRealizationMode.Any)] FileRealizationMode realizationMode, [DefaultValue(false), Description("Stream bytes if true")] bool useStream, [Description("File name where the GRPC port can be found when using cache service. 'CASaaS GRPC port' if not specified.")] string grpcPortFileName, [Description("The GRPC port."), DefaultValue(0)] int grpcPort ) { var ht = GetHashTypeByNameOrDefault(hashType); ServiceClientRpcConfiguration rpcConfig = null; if (cacheName != null) { if (grpcPort == 0) { grpcPort = Helpers.GetGrpcPortFromFile(_logger, grpcPortFileName); } rpcConfig = new ServiceClientRpcConfiguration(grpcPort); } RunContentStore(cacheName, cachePath, rpcConfig, async(context, session) => { BoolResult result; ContentHash contentHash; long contentSize; if (useStream) { using (var stream = File.OpenRead(path)) { var r = await session.PutStreamAsync(context, ht, stream, CancellationToken.None).ConfigureAwait(false); contentHash = r.ContentHash; contentSize = r.ContentSize; result = r; } } else { var r = await session.PutFileAsync( context, ht, new AbsolutePath(path), realizationMode, CancellationToken.None).ConfigureAwait(false); contentHash = r.ContentHash; contentSize = r.ContentSize; result = r; } if (!result.Succeeded) { context.Error(result.ToString()); } else { context.Always($"Content added with hash=[{contentHash}], size=[{contentSize}]"); } }); }