private IEnumerator <IAsyncResult> ReleaseLeaseImpl(Guid leaseId, IContainerCondition condition, bool updateLastModificationTime, AsyncIteratorContext <NoResults> context) { IAsyncResult asyncResult = this.StorageManager.AsyncProcessor.BeginExecute((TimeSpan param0) => { using (DevelopmentStorageDbDataContext dbContext = DevelopmentStorageDbDataContext.GetDbContext()) { Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer nullable = this.LoadBlobContainer(dbContext); DbBlobContainer.CheckBlobContainerConditionWithoutLeaseCondition(nullable, condition); DateTime utcNow = DateTime.UtcNow; ContainerLeaseInfo containerLeaseInfo = new ContainerLeaseInfo(nullable, utcNow); if (containerLeaseInfo.Id.HasValue && containerLeaseInfo.Id.Value != leaseId) { throw new LeaseLostException(); } if (containerLeaseInfo.State.Value == LeaseState.Available) { throw new LeaseLostException(); } nullable.LeaseEndTime = new DateTime?(utcNow); nullable.LeaseState = 0; nullable.IsLeaseOp = !updateLastModificationTime; dbContext.SubmitChanges(); containerLeaseInfo.SetBlobContainer(nullable, utcNow); this._container = nullable; this.LeaseInfo = containerLeaseInfo; } }, this.Timeout, context.GetResumeCallback(), context.GetResumeState("DbBlobContainer.ReleaseLease")); yield return(asyncResult); this.StorageManager.AsyncProcessor.EndExecute(asyncResult); }
private IEnumerator <IAsyncResult> SetPropertiesImpl(ContainerPropertyNames propertyNames, IContainerCondition condition, AsyncIteratorContext <NoResults> context) { IAsyncResult asyncResult = this.StorageManager.AsyncProcessor.BeginExecute <Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer>((TimeSpan param0) => { Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer blobContainer; using (DevelopmentStorageDbDataContext dbContext = DevelopmentStorageDbDataContext.GetDbContext()) { Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer serviceMetadata = this.LoadBlobContainer(dbContext); ContainerLeaseInfo containerLeaseInfo = new ContainerLeaseInfo(serviceMetadata, DateTime.UtcNow); DbBlobContainer.CheckBlobContainerCondition(serviceMetadata, condition, containerLeaseInfo); if ((propertyNames & ContainerPropertyNames.ServiceMetadata) != ContainerPropertyNames.None) { serviceMetadata.ServiceMetadata = ((IContainer)this).ServiceMetadata; } if ((propertyNames & ContainerPropertyNames.ApplicationMetadata) != ContainerPropertyNames.None) { serviceMetadata.Metadata = this.ApplicationMetadata; } dbContext.SubmitChanges(); this.LeaseInfo = containerLeaseInfo; blobContainer = serviceMetadata; } return(blobContainer); }, this.Timeout, context.GetResumeCallback(), context.GetResumeState("DbBlobContainer.SetProperties")); yield return(asyncResult); this._container = this.StorageManager.AsyncProcessor.EndExecute <Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer>(asyncResult); }
public DbBlobContainer(DbStorageAccount account, Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer container, bool shouldGenerateLeaseInfo) : this(account, container) { if (shouldGenerateLeaseInfo) { this.LeaseInfo = new ContainerLeaseInfo(container, DateTime.UtcNow); } }
public DbBlobContainer(DbStorageAccount account, Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer container) { StorageStampHelpers.CheckContainerName(container.ContainerName, Microsoft.Cis.Services.Nephos.Common.Storage.ContainerType.BlobContainer, false); this.StorageManager = account.StorageManager; this._container = container; this.OperationStatus = account.OperationStatus; this.Account = account; }
private IEnumerator <IAsyncResult> ChangeLeaseImpl(Guid leaseId, Guid proposedLeaseId, IContainerCondition condition, bool updateLastModificationTime, AsyncIteratorContext <NoResults> context) { IAsyncResult asyncResult = this.StorageManager.AsyncProcessor.BeginExecute((TimeSpan param0) => { using (DevelopmentStorageDbDataContext dbContext = DevelopmentStorageDbDataContext.GetDbContext()) { Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer nullable = this.LoadBlobContainer(dbContext); DbBlobContainer.CheckBlobContainerConditionWithoutLeaseCondition(nullable, condition); DateTime utcNow = DateTime.UtcNow; ContainerLeaseInfo containerLeaseInfo = new ContainerLeaseInfo(nullable, utcNow); switch (containerLeaseInfo.State.Value) { case LeaseState.Available: { throw new LeaseNotPresentException(); } case LeaseState.Leased: { if (!(leaseId != containerLeaseInfo.Id.Value) || !(proposedLeaseId != containerLeaseInfo.Id.Value)) { break; } throw new LeaseHeldException(); } case LeaseState.Expired: { throw new LeaseHeldException(); } case LeaseState.Breaking: { if (!containerLeaseInfo.Id.HasValue || !(leaseId != containerLeaseInfo.Id.Value) || !(proposedLeaseId != containerLeaseInfo.Id.Value)) { throw new LeaseBrokenException(); } throw new LeaseHeldException(); } case LeaseState.Broken: { throw new LeaseNotPresentException(); } } nullable.LeaseId = new Guid?(proposedLeaseId); nullable.IsLeaseOp = !updateLastModificationTime; dbContext.SubmitChanges(); containerLeaseInfo.SetBlobContainer(nullable, utcNow); this._container = nullable; this.LeaseInfo = containerLeaseInfo; } }, this.Timeout, context.GetResumeCallback(), context.GetResumeState("DbBlobContainer.ChangeLease")); yield return(asyncResult); this.StorageManager.AsyncProcessor.EndExecute(asyncResult); }
private Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer GetContainer(DevelopmentStorageDbDataContext context) { Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer blobContainer = ( from c in context.BlobContainers where (c.AccountName == this._accountName) && (c.ContainerName == this._containerName) select c).FirstOrDefault <Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer>(); if (blobContainer == null) { throw new ContainerNotFoundException(); } return(blobContainer); }
internal static Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer LoadBlobContainer(DevelopmentStorageDbDataContext context, Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer container) { StorageStampHelpers.CheckContainerName(container.ContainerName, Microsoft.Cis.Services.Nephos.Common.Storage.ContainerType.BlobContainer, false); Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer blobContainer = ( from c in context.BlobContainers where (c.AccountName == container.AccountName) && (c.ContainerName == container.ContainerName) select c).FirstOrDefault <Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer>(); if (blobContainer == null) { throw new ContainerNotFoundException(); } return(blobContainer); }
private IEnumerator <IAsyncResult> GetPropertiesImpl(ContainerPropertyNames propertyNames, IContainerCondition condition, AsyncIteratorContext <NoResults> context) { IAsyncResult asyncResult = this.StorageManager.AsyncProcessor.BeginExecute((TimeSpan param0) => { using (DevelopmentStorageDbDataContext dbContext = DevelopmentStorageDbDataContext.GetDbContext()) { Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer blobContainer = this.LoadBlobContainer(dbContext); ContainerLeaseInfo containerLeaseInfo = new ContainerLeaseInfo(blobContainer, DateTime.UtcNow); DbBlobContainer.CheckBlobContainerCondition(blobContainer, condition, containerLeaseInfo); this._container = blobContainer; this.LeaseInfo = containerLeaseInfo; } }, this.Timeout, context.GetResumeCallback(), context.GetResumeState("DbBlobContainer.GetProperties")); yield return(asyncResult); this.StorageManager.AsyncProcessor.EndExecute(asyncResult); }
internal static void CheckBlobContainerCondition(Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer blobContainer, IContainerCondition condition, bool?isForSource, bool shouldCheckLease, ContainerLeaseInfo leaseInfo) { if (condition != null && condition.IfModifiedSinceTime.HasValue && condition.IfModifiedSinceTime.Value >= blobContainer.LastModificationTime) { throw new ConditionNotMetException(null, isForSource, null); } if (condition != null && condition.IfNotModifiedSinceTime.HasValue && condition.IfNotModifiedSinceTime.Value < blobContainer.LastModificationTime) { throw new ConditionNotMetException(null, isForSource, null); } if (shouldCheckLease && condition != null && condition.LeaseId.HasValue && leaseInfo != null) { LeaseState?state = leaseInfo.State; LeaseState valueOrDefault = state.GetValueOrDefault(); if (state.HasValue) { switch (valueOrDefault) { case LeaseState.Available: case LeaseState.Broken: { if (!leaseInfo.Id.HasValue) { throw new LeaseNotPresentException(); } throw new LeaseLostException(); } case LeaseState.Expired: { throw new LeaseLostException(); } } } if (leaseInfo.Id.Value != condition.LeaseId.Value) { throw new LeaseHeldException(); } } }
internal void SetBlobContainer(Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer container, DateTime utcTime) { this.m_container = container; this.m_InfoValidAt = utcTime; this.SetLeaseState(); }
private IEnumerator <IAsyncResult> DeleteContainerImpl(IContainerCondition conditions, Guid?leaseId, AsyncIteratorContext <NoResults> context) { object obj; IStringDataEventStream verboseDebug = Logger <INormalAndDebugLogger> .Instance.VerboseDebug; object[] timeout = new object[2]; object[] objArray = timeout; obj = (leaseId.HasValue ? leaseId.Value.ToString() : "NULL"); objArray[0] = obj; timeout[1] = this.Timeout; verboseDebug.Log("DeleteContainerImpl({0},{1})", timeout); IAsyncResult asyncResult = this.StorageManager.AsyncProcessor.BeginExecute((TimeSpan param0) => { using (DevelopmentStorageDbDataContext dbContext = DevelopmentStorageDbDataContext.GetDbContext()) { Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer blobContainer = this.LoadBlobContainer(dbContext); ContainerLeaseInfo containerLeaseInfo = new ContainerLeaseInfo(blobContainer, DateTime.UtcNow); DbBlobContainer.CheckBlobContainerCondition(blobContainer, conditions, containerLeaseInfo); LeaseState?state = containerLeaseInfo.State; LeaseState valueOrDefault = state.GetValueOrDefault(); if (state.HasValue) { switch (valueOrDefault) { case LeaseState.Available: case LeaseState.Broken: { if (!leaseId.HasValue) { break; } if (!containerLeaseInfo.Id.HasValue) { throw new LeaseNotPresentException(); } throw new LeaseLostException(); } case LeaseState.Leased: case LeaseState.Breaking: { if (leaseId.HasValue && !(leaseId.Value != containerLeaseInfo.Id.Value)) { break; } throw new LeaseHeldException(); } case LeaseState.Expired: { if (!leaseId.HasValue) { break; } throw new LeaseLostException(); } } } dbContext.BlobContainers.DeleteOnSubmit(blobContainer); dbContext.SubmitChanges(); } }, this.Timeout, context.GetResumeCallback(), context.GetResumeState("DbBlobContainer.DeleteContainerImpl")); yield return(asyncResult); this.StorageManager.AsyncProcessor.EndExecute(asyncResult); }
internal static void CheckBlobContainerConditionWithoutLeaseCondition(Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer blobContainer, IContainerCondition condition) { DbBlobContainer.CheckBlobContainerCondition(blobContainer, condition, null, false, null); }
internal static void CheckBlobContainerCondition(Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer blobContainer, IContainerCondition condition, ContainerLeaseInfo leaseInfo) { DbBlobContainer.CheckBlobContainerCondition(blobContainer, condition, null, true, leaseInfo); }
private IEnumerator <IAsyncResult> PutBlockImpl(byte[] blockIdentifier, long contentLength, Stream inputStream, byte[] contentMD5, bool isLargeBlockBlobRequest, IBlobObjectCondition condition, AsyncIteratorContext <NoResults> context) { Microsoft.WindowsAzure.DevelopmentStorage.Store.BlobContainer blobContainer = null; BlockBlob blockBlob = null; IAsyncResult asyncResult = this._storageManager.AsyncProcessor.BeginExecute((TimeSpan param0) => { long num; long num1; StorageStampHelpers.ValidatePutBlockArguments(this, blockIdentifier, contentLength, contentMD5, condition, true); string str = null; using (DevelopmentStorageDbDataContext dbContext = DevelopmentStorageDbDataContext.GetDbContext()) { blobContainer = base.LoadContainer(dbContext); blockBlob = base.TryLoadBlockBlob(dbContext, out str); if (blockBlob == null) { lock (DbListBlobObject.SynchronizePutBlock) { blockBlob = base.TryLoadBlockBlob(dbContext, out str); if (blockBlob == null) { if (string.IsNullOrEmpty(str)) { str = BlockBlobDataManager.CreateUniqueDirectoryLoadBalanced(); } using (DevelopmentStorageDbDataContext developmentStorageDbDataContext = DevelopmentStorageDbDataContext.GetDbContext()) { Logger <INormalAndDebugLogger> .Instance.VerboseDebug.Log("PutBlockImpl: Creating record for ({0};{1};{2})", new object[] { this._blob.AccountName, this._blob.ContainerName, this._blob.BlobName }); StorageStampHelpers.CheckBlobName(this._blob.BlobName, this._blob.ContainerName); blockBlob = new BlockBlob() { AccountName = this._blob.AccountName, ContainerName = this._blob.ContainerName, BlobName = this._blob.BlobName, VersionTimestamp = DateTime.SpecifyKind(DateTime.MaxValue, DateTimeKind.Utc), ContentLength = (long)0, IsCommitted = new bool?(false), HasBlock = new bool?(true), DirectoryPath = str, GenerationId = Guid.NewGuid().ToString(), SnapshotCount = 0 }; developmentStorageDbDataContext.Blobs.InsertOnSubmit(blockBlob); developmentStorageDbDataContext.SubmitChanges(); } } } } bool flag = false; BlobLeaseInfo blobLeaseInfo = new BlobLeaseInfo(blockBlob, DateTime.UtcNow); DbBlobObject.CheckCopyState(blockBlob); flag = DbBlobObject.CheckConditionsAndReturnResetRequired(blockBlob, blobLeaseInfo, condition, null, true); byte[] byteArrayFromStream = DbStorageHelper.GetByteArrayFromStream(inputStream, out num, true, isLargeBlockBlobRequest); string file = BlockBlobDataManager.WriteBytesToFile(new BlockBlobMetaInfo(this._blob.AccountName, this._blob.ContainerName, this._blob.BlobName, str), byteArrayFromStream, out num1); string hexString = DbListBlobObject.ToHexString(blockIdentifier); BlockData blockDatum = this.TryLoadUncommittedBlock(dbContext, hexString); if (blockDatum == null) { blockDatum = new BlockData() { AccountName = this._blob.AccountName, ContainerName = this._blob.ContainerName, BlobName = this._blob.BlobName, VersionTimestamp = this._blob.VersionTimestamp, IsCommitted = false, BlockId = hexString }; dbContext.BlocksData.InsertOnSubmit(blockDatum); } blockDatum.Length = new long?(num); blockDatum.FilePath = file; blockDatum.StartOffset = new long?(num1); base.ResetBlobLeaseToAvailable(blockBlob, flag); dbContext.SubmitChanges(); blobLeaseInfo.SetBlob(blockBlob, blobLeaseInfo.LeaseInfoValidAt); this.LeaseInfo = blobLeaseInfo; } }, base.Timeout, context.GetResumeCallback(), context.GetResumeState("DbListBlobObject.PutBlock")); yield return(asyncResult); this._storageManager.AsyncProcessor.EndExecute(asyncResult); }