public void CreateVersion(Version version) { if (version == null) throw new ArgumentNullException("version", "Version cannot be null."); if (version.AppKey == Guid.Empty) throw new ArgumentException("App key cannot be empty.", "version.AppKey"); try { using (var client = new AmazonS3Client(Context.AwsAccessKeyId, Context.AwsSecretAccessKey)) { var appsController = new Apps(Context); var app = appsController.GetApp(version.AppKey); version.GroupKey = app.GroupKey; var indexesController = new Internal.Indexes(Context); using (var stream = version.Serialise()) { string indexPath = GetAppVersionsIndexPath(version.AppKey); var index = indexesController.LoadIndex(indexPath); if (index.Entries.Any(e => e.Key == version.Key)) { throw new DeploymentException("Index already contains entry for given key!"); } using (var putResponse = client.PutObject(new PutObjectRequest() { BucketName = Context.BucketName, Key = string.Format("{0}/{1}/{2}", STR_VERSIONS_CONTAINER_PATH, version.Key.ToString("N"), STR_INFO_FILE_NAME), InputStream = stream, })) { } index.Entries.Add(new Internal.EntityIndexEntry() { Key = version.Key, Name = CreateVersionIndexName(version) }); Internal.Indexes.NameSortIndex(index, true); indexesController.UpdateIndex(indexPath, index); } } } catch (AmazonS3Exception awsEx) { throw new DeploymentException("Failed creating version.", awsEx); } catch (Exception ex) { throw new DeploymentException("Failed creating version.", ex); } }
public void UpdateVersion(Version version) { if (version == null) throw new ArgumentNullException("version", "Version cannot be null."); if (version.Key == Guid.Empty) throw new ArgumentException("Version key cannot be empty.", "version.Key"); // Disabled these checks as we automatically resolve them for now. //if (version.AppKey == Guid.Empty) // throw new ArgumentException("Version app key cannot be empty.", "version.AppKey"); //if (version.GroupKey == Guid.Empty) // throw new ArgumentException("Version group key cannot be empty.", "version.GroupKey"); var existingVersion = GetVersion(version.Key); // Do not allow moving between apps & groups. version.AppKey = existingVersion.AppKey; version.GroupKey = existingVersion.GroupKey; using (var stream = version.Serialise()) { try { using (var client = new AmazonS3Client(Context.AwsAccessKeyId, Context.AwsSecretAccessKey)) { var indexesController = new Internal.Indexes(Context); using (var putResponse = client.PutObject(new PutObjectRequest() { BucketName = Context.BucketName, Key = string.Format("{0}/{1}/{2}", STR_VERSIONS_CONTAINER_PATH, version.Key.ToString("N"), STR_INFO_FILE_NAME), InputStream = stream, })) { } string indexPath = GetAppVersionsIndexPath(version.AppKey); indexesController.PutIndexEntry(indexPath, new Internal.EntityIndexEntry() { Key = version.Key, Name = CreateVersionIndexName(version) }, true); } } catch (AmazonS3Exception awsEx) { throw new DeploymentException("Failed deleting version.", awsEx); } catch (Exception ex) { throw new DeploymentException("Failed deleting version.", ex); } } }