RavenFS.Synchronization.Rdc.LocalRdcManager.GetSignatureManifestAsync C# (CSharp) Метод

GetSignatureManifestAsync() публичный Метод

public GetSignatureManifestAsync ( DataInfo dataInfo ) : Task
dataInfo DataInfo
Результат Task
		public Task<SignatureManifest> GetSignatureManifestAsync(DataInfo dataInfo)
		{
			return Task.Factory.StartNew(() =>
				                             {
					                             signatureBuidInProgress.GetOrAdd(dataInfo.Name, new ReaderWriterLockSlim())
					                                                    .EnterUpgradeableReadLock();
					                             IEnumerable<SignatureInfo> signatureInfos = null;

					                             try
					                             {
						                             var lastUpdate = _signatureRepository.GetLastUpdate();

						                             if (lastUpdate == null || lastUpdate < dataInfo.CreatedAt)
						                             {
							                             signatureBuidInProgress.GetOrAdd(dataInfo.Name, new ReaderWriterLockSlim())
							                                                    .EnterWriteLock();
							                             try
							                             {
								                             signatureInfos = PrepareSignatures(dataInfo.Name);
							                             }
							                             finally
							                             {
								                             signatureBuidInProgress.GetOrAdd(dataInfo.Name, new ReaderWriterLockSlim())
								                                                    .ExitWriteLock();
							                             }
						                             }
						                             else
						                             {
							                             signatureInfos = _signatureRepository.GetByFileName();
						                             }
					                             }
					                             finally
					                             {
						                             signatureBuidInProgress.GetOrAdd(dataInfo.Name, new ReaderWriterLockSlim())
						                                                    .ExitUpgradeableReadLock();
					                             }

					                             var result = new SignatureManifest
						                                          {
							                                          FileLength = dataInfo.Length,
							                                          FileName = dataInfo.Name,
							                                          Signatures = SignatureInfosToSignatures(signatureInfos)
						                                          };
					                             return result;
				                             });
		}

Usage Example

Пример #1
0
		public async Task<HttpResponseMessage> Manifest(string filename)
		{
			filename = Uri.UnescapeDataString(filename);
			FileAndPages fileAndPages = null;
			try
			{
				Storage.Batch(accessor => fileAndPages = accessor.GetFile(filename, 0, 0));
			}
			catch (FileNotFoundException)
			{
				Log.Debug("Signature manifest for a file '{0}' was not found", filename);
				return Request.CreateResponse(HttpStatusCode.NotFound);
			}

			long? fileLength = fileAndPages.TotalSize;

			using (var signatureRepository = new StorageSignatureRepository(Storage, filename))
			{
				var rdcManager = new LocalRdcManager(signatureRepository, Storage, SigGenerator);
				var signatureManifest =
					await rdcManager.GetSignatureManifestAsync(new DataInfo
						                                           {
							                                           Name = filename,
							                                           CreatedAt =
								                                           Convert.ToDateTime(fileAndPages.Metadata["Last-Modified"])
								                                                  .ToUniversalTime()
						                                           });
				signatureManifest.FileLength = fileLength ?? 0;

				Log.Debug("Signature manifest for a file '{0}' was downloaded. Signatures count was {1}", filename,
				          signatureManifest.Signatures.Count);

				return Request.CreateResponse(HttpStatusCode.OK, signatureManifest);
			}
		}
All Usage Examples Of RavenFS.Synchronization.Rdc.LocalRdcManager::GetSignatureManifestAsync