internal async Task <VersionRow> AddVersionAsync(string appName, string version, string fileHash) { var tableStorage = new AzureTableStorageProvider(storageAccount); var appVersion = new VersionRow(appName, version, fileHash); tableStorage.Add(VersionsTableName, appVersion); await tableStorage.SaveAsync(); return(appVersion); }
internal async Task <PackageTag> AddPackageVersionAsync(string name, string tag, string versionChanges, string fileHash) { var tableStorage = new AzureTableStorageProvider(storageAccount); if (name == Package.PACKAGES_PARTITION_NAME) { throw new ArgumentException($"{name} is reserved"); } Package package = new Package(name, tag, fileHash); tableStorage.Upsert(PackagesTableName, package); // save as Packages | name@tag List <PackageTag> allTags = await GetAllEntitiesFromPartitionAsync <PackageTag>(PackagesTableName, name); if (allTags.Any()) { if (allTags.Any(t => t.Tag == tag) && allTags.First().Tag != tag) //tag already exist and it is not last { throw new ArgumentException($"Tag {tag} already exist and it is not last"); } else if (allTags.First().Tag == tag) { IEnumerable <PackageChange> packageChanges = await GetAllEntitiesFromPartitionAsync <PackageChange>(PackagesFileChangesTableName, name); foreach (var prevChange in packageChanges.Where(c => c.Tag == tag)) { tableStorage.Delete(PackagesFileChangesTableName, prevChange); } tableStorage.Delete(PackagesTableName, allTags.First()); } } PackageTag packageVersion = new PackageTag(name, tag, fileHash); tableStorage.Upsert(PackagesTableName, packageVersion); //save as name | timestamp (tag, hash) JObject versionInfoJO = JObject.Parse(versionChanges); foreach (var fileEntry in versionInfoJO["files"]) { string path = fileEntry["path"].Value <string>(); string hash = fileEntry["hash"].Value <string>(); string changeType = fileEntry["editType"].Value <string>(); tableStorage.Add(PackagesFileChangesTableName, new PackageChange(name, tag, path, hash, changeType)); } await tableStorage.SaveAsync(); return(packageVersion); }
public async Task SaveAsync_TooManyOperationsForEGT_ThrowsInvalidOperationException() { string partitionKey = "123"; _tableStorageProvider.Add(_tableName, new DecoratedItem { Id = partitionKey, Name = "200" }); await _tableStorageProvider.SaveAsync(); int expectedCount = 100; for (int i = 0; i < expectedCount; i++) { var item = new DecoratedItem { Id = partitionKey, Name = i.ToString(CultureInfo.InvariantCulture) }; _tableStorageProvider.Add(_tableName, item); } // this next insert should fail, canceling the whole transaction _tableStorageProvider.Add(_tableName, new DecoratedItem { Id = partitionKey, Name = "200" }); try { await _tableStorageProvider.SaveAsync(Execute.Atomically); Assert.Fail("Should have thrown exception"); } catch (InvalidOperationException) { } Assert.AreEqual(1, (await _tableStorageProvider.CreateQuery <DecoratedItem>(_tableName).PartitionKeyEquals(partitionKey).Async()).Count()); }
public async Task Insert_101EntitiesInTheSamePartition_ShouldSucceed() { string partitionKey = "123"; int expectedCount = 101; for (int i = 0; i < expectedCount; i++) { var item = new DecoratedItem { Id = partitionKey, Name = i.ToString(CultureInfo.InvariantCulture) }; _tableStorageProvider.Add(_tableName, item); } await _tableStorageProvider.SaveAsync(Execute.InBatches); IEnumerable <DecoratedItem> items = (await _tableStorageProvider.CreateQuery <DecoratedItem>(_tableName).PartitionKeyEquals(partitionKey).Async()); Assert.AreEqual(expectedCount, items.Count()); }