package awsbatch


// Represents a group of Job Definitions.
//
// All Job Definitions that
// declare a share identifier will be considered members of the Share
// defined by that share identifier.
//
// The Scheduler divides the maximum available vCPUs of the ComputeEnvironment
// among Jobs in the Queue based on their shareIdentifier and the weightFactor
// associated with that shareIdentifier.
//
// Example:
//   fairsharePolicy := batch.NewFairshareSchedulingPolicy(this, jsii.String("myFairsharePolicy"))
//
//   fairsharePolicy.AddShare(&Share{
//   	ShareIdentifier: jsii.String("A"),
//   	WeightFactor: jsii.Number(1),
//   })
//   fairsharePolicy.AddShare(&Share{
//   	ShareIdentifier: jsii.String("B"),
//   	WeightFactor: jsii.Number(1),
//   })
//   batch.NewJobQueue(this, jsii.String("JobQueue"), &JobQueueProps{
//   	SchedulingPolicy: fairsharePolicy,
//   })
//
type Share struct {
	// The identifier of this Share.
	//
	// All jobs that specify this share identifier
	// when submitted to the queue will be considered as part of this Share.
	ShareIdentifier *string `field:"required" json:"shareIdentifier" yaml:"shareIdentifier"`
	// The weight factor given to this Share.
	//
	// The Scheduler decides which jobs to put in the Compute Environment
	// such that the following ratio is equal for each job:
	//
	// `sharevCpu / weightFactor`,
	//
	// where `sharevCpu` is the total amount of vCPU given to that particular share; that is,
	// the sum of the vCPU of each job currently in the Compute Environment for that share.
	//
	// See the readme of this module for a detailed example that shows how these are used,
	// how it relates to `computeReservation`, and how `shareDecay` affects these calculations.
	WeightFactor *float64 `field:"required" json:"weightFactor" yaml:"weightFactor"`
}

