bot_scaling.proto: Add SwarmingDimension message type

Add a SwarmingDimension message type, as a repeating field, in the
BotPolicy message, that will be utilized to validate the current
Swarming allocation prior to triggering an additional adjustment.  The
intention is to ensure that the last configuration is in place before
triggering any type of further adjustment.

Bug: chromium:1053818
Change-Id: I2890b79e29a439dd07919ca4dbd8d50cae086798
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/infra/proto/+/2062737
Commit-Queue: Mike Nichols <mikenichols@chromium.org>
Tested-by: Mike Nichols <mikenichols@chromium.org>
Reviewed-by: Dhanya Ganesh <dhanyaganesh@chromium.org>
diff --git a/descpb.bin b/descpb.bin
index 234c135..bedd338 100644
--- a/descpb.bin
+++ b/descpb.bin
Binary files differ
diff --git a/go/chromiumos/bot_scaling.pb.go b/go/chromiumos/bot_scaling.pb.go
index e639814..ef7e9fc 100644
--- a/go/chromiumos/bot_scaling.pb.go
+++ b/go/chromiumos/bot_scaling.pb.go
@@ -101,24 +101,76 @@
 	return 0
 }
 
+// Defines Swarming dimensions associated with a bot group.
+type SwarmingDimension struct {
+	// Dimesion name
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// Dimension value
+	Value                string   `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SwarmingDimension) Reset()         { *m = SwarmingDimension{} }
+func (m *SwarmingDimension) String() string { return proto.CompactTextString(m) }
+func (*SwarmingDimension) ProtoMessage()    {}
+func (*SwarmingDimension) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dbe70eabfd64e7ef, []int{1}
+}
+
+func (m *SwarmingDimension) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SwarmingDimension.Unmarshal(m, b)
+}
+func (m *SwarmingDimension) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SwarmingDimension.Marshal(b, m, deterministic)
+}
+func (m *SwarmingDimension) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SwarmingDimension.Merge(m, src)
+}
+func (m *SwarmingDimension) XXX_Size() int {
+	return xxx_messageInfo_SwarmingDimension.Size(m)
+}
+func (m *SwarmingDimension) XXX_DiscardUnknown() {
+	xxx_messageInfo_SwarmingDimension.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SwarmingDimension proto.InternalMessageInfo
+
+func (m *SwarmingDimension) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *SwarmingDimension) GetValue() string {
+	if m != nil {
+		return m.Value
+	}
+	return ""
+}
+
 // Bot Policy to apply to a bot group.
 type BotPolicy struct {
 	// Bot group controlled by this policy, like, 'cq', 'postsubmit',...
 	BotGroup string `protobuf:"bytes,1,opt,name=bot_group,json=botGroup,proto3" json:"bot_group,omitempty"`
 	// The type of bot to be requested.
-	BotType              *BotType                       `protobuf:"bytes,2,opt,name=bot_type,json=botType,proto3" json:"bot_type,omitempty"`
-	ScalingRestriction   *BotPolicy_ScalingRestriction  `protobuf:"bytes,3,opt,name=scaling_restriction,json=scalingRestriction,proto3" json:"scaling_restriction,omitempty"`
-	RegionRestrictions   []*BotPolicy_RegionRestriction `protobuf:"bytes,4,rep,name=region_restrictions,json=regionRestrictions,proto3" json:"region_restrictions,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
-	XXX_unrecognized     []byte                         `json:"-"`
-	XXX_sizecache        int32                          `json:"-"`
+	BotType            *BotType                       `protobuf:"bytes,2,opt,name=bot_type,json=botType,proto3" json:"bot_type,omitempty"`
+	ScalingRestriction *BotPolicy_ScalingRestriction  `protobuf:"bytes,3,opt,name=scaling_restriction,json=scalingRestriction,proto3" json:"scaling_restriction,omitempty"`
+	RegionRestrictions []*BotPolicy_RegionRestriction `protobuf:"bytes,4,rep,name=region_restrictions,json=regionRestrictions,proto3" json:"region_restrictions,omitempty"`
+	// A set of dimensions used to validate current Swarming allocations.
+	SwarmingDimensions   []*SwarmingDimension `protobuf:"bytes,5,rep,name=swarming_dimensions,json=swarmingDimensions,proto3" json:"swarming_dimensions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
 }
 
 func (m *BotPolicy) Reset()         { *m = BotPolicy{} }
 func (m *BotPolicy) String() string { return proto.CompactTextString(m) }
 func (*BotPolicy) ProtoMessage()    {}
 func (*BotPolicy) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dbe70eabfd64e7ef, []int{1}
+	return fileDescriptor_dbe70eabfd64e7ef, []int{2}
 }
 
 func (m *BotPolicy) XXX_Unmarshal(b []byte) error {
@@ -167,6 +219,13 @@
 	return nil
 }
 
+func (m *BotPolicy) GetSwarmingDimensions() []*SwarmingDimension {
+	if m != nil {
+		return m.SwarmingDimensions
+	}
+	return nil
+}
+
 // Scaling restriction specifies the limits on how the group can be
 // expanded or reduced.
 type BotPolicy_ScalingRestriction struct {
@@ -190,7 +249,7 @@
 func (m *BotPolicy_ScalingRestriction) String() string { return proto.CompactTextString(m) }
 func (*BotPolicy_ScalingRestriction) ProtoMessage()    {}
 func (*BotPolicy_ScalingRestriction) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dbe70eabfd64e7ef, []int{1, 0}
+	return fileDescriptor_dbe70eabfd64e7ef, []int{2, 0}
 }
 
 func (m *BotPolicy_ScalingRestriction) XXX_Unmarshal(b []byte) error {
@@ -266,7 +325,7 @@
 func (m *BotPolicy_RegionRestriction) String() string { return proto.CompactTextString(m) }
 func (*BotPolicy_RegionRestriction) ProtoMessage()    {}
 func (*BotPolicy_RegionRestriction) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dbe70eabfd64e7ef, []int{1, 1}
+	return fileDescriptor_dbe70eabfd64e7ef, []int{2, 1}
 }
 
 func (m *BotPolicy_RegionRestriction) XXX_Unmarshal(b []byte) error {
@@ -321,7 +380,7 @@
 func (m *BotPolicyCfg) String() string { return proto.CompactTextString(m) }
 func (*BotPolicyCfg) ProtoMessage()    {}
 func (*BotPolicyCfg) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dbe70eabfd64e7ef, []int{2}
+	return fileDescriptor_dbe70eabfd64e7ef, []int{3}
 }
 
 func (m *BotPolicyCfg) XXX_Unmarshal(b []byte) error {
@@ -370,7 +429,7 @@
 func (m *ScalingAction) String() string { return proto.CompactTextString(m) }
 func (*ScalingAction) ProtoMessage()    {}
 func (*ScalingAction) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dbe70eabfd64e7ef, []int{3}
+	return fileDescriptor_dbe70eabfd64e7ef, []int{4}
 }
 
 func (m *ScalingAction) XXX_Unmarshal(b []byte) error {
@@ -443,7 +502,7 @@
 func (m *ScalingAction_RegionalAction) String() string { return proto.CompactTextString(m) }
 func (*ScalingAction_RegionalAction) ProtoMessage()    {}
 func (*ScalingAction_RegionalAction) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dbe70eabfd64e7ef, []int{3, 0}
+	return fileDescriptor_dbe70eabfd64e7ef, []int{4, 0}
 }
 
 func (m *ScalingAction_RegionalAction) XXX_Unmarshal(b []byte) error {
@@ -501,7 +560,7 @@
 func (m *RoboCropAction) String() string { return proto.CompactTextString(m) }
 func (*RoboCropAction) ProtoMessage()    {}
 func (*RoboCropAction) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dbe70eabfd64e7ef, []int{4}
+	return fileDescriptor_dbe70eabfd64e7ef, []int{5}
 }
 
 func (m *RoboCropAction) XXX_Unmarshal(b []byte) error {
@@ -539,6 +598,7 @@
 func init() {
 	proto.RegisterEnum("chromiumos.Actionable", Actionable_name, Actionable_value)
 	proto.RegisterType((*BotType)(nil), "chromiumos.BotType")
+	proto.RegisterType((*SwarmingDimension)(nil), "chromiumos.SwarmingDimension")
 	proto.RegisterType((*BotPolicy)(nil), "chromiumos.BotPolicy")
 	proto.RegisterType((*BotPolicy_ScalingRestriction)(nil), "chromiumos.BotPolicy.ScalingRestriction")
 	proto.RegisterType((*BotPolicy_RegionRestriction)(nil), "chromiumos.BotPolicy.RegionRestriction")
@@ -551,43 +611,47 @@
 func init() { proto.RegisterFile("chromiumos/bot_scaling.proto", fileDescriptor_dbe70eabfd64e7ef) }
 
 var fileDescriptor_dbe70eabfd64e7ef = []byte{
-	// 605 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xcd, 0x6e, 0xd3, 0x4c,
-	0x14, 0xfd, 0x9c, 0x34, 0xcd, 0x97, 0x9b, 0x36, 0x0d, 0x53, 0x51, 0xa5, 0x05, 0x89, 0x62, 0x09,
-	0x11, 0xb1, 0x70, 0xa4, 0x82, 0x2a, 0xb6, 0x4d, 0x68, 0x69, 0x37, 0x25, 0x9a, 0x80, 0x44, 0x61,
-	0x61, 0xd9, 0xee, 0xc4, 0x1d, 0xe1, 0xf8, 0x9a, 0x99, 0xa9, 0xa0, 0x7d, 0x06, 0x9e, 0x80, 0x77,
-	0xe0, 0x01, 0xd9, 0xa1, 0xf9, 0x49, 0x63, 0x37, 0x45, 0x02, 0x89, 0xe5, 0x39, 0x73, 0xef, 0x99,
-	0x73, 0xcf, 0x1d, 0x1b, 0x1e, 0x26, 0x17, 0x02, 0x67, 0xfc, 0x72, 0x86, 0x72, 0x10, 0xa3, 0x0a,
-	0x65, 0x12, 0x65, 0x3c, 0x4f, 0x83, 0x42, 0xa0, 0x42, 0x02, 0x8b, 0x53, 0xff, 0x18, 0x9a, 0x43,
-	0x54, 0x6f, 0xaf, 0x0a, 0x46, 0xb6, 0xe1, 0x7f, 0x53, 0xcb, 0xaf, 0x59, 0xcf, 0xdb, 0xf5, 0xfa,
-	0x2d, 0xda, 0x8c, 0x51, 0x4d, 0xf8, 0x35, 0x23, 0x3e, 0xac, 0x27, 0x28, 0x98, 0x0c, 0x0b, 0x26,
-	0xc2, 0x18, 0x55, 0xaf, 0xb6, 0xeb, 0xf5, 0x1b, 0xb4, 0x6d, 0xc8, 0x31, 0x13, 0x43, 0x54, 0xfe,
-	0xf7, 0x15, 0x68, 0x0d, 0x51, 0x8d, 0x31, 0xe3, 0xc9, 0x15, 0x79, 0x00, 0x2d, 0x2d, 0x96, 0x0a,
-	0xbc, 0x2c, 0x9c, 0x9a, 0x56, 0x7f, 0xad, 0x31, 0x09, 0xec, 0x4d, 0xea, 0xaa, 0x60, 0x46, 0xa9,
-	0xbd, 0xb7, 0x19, 0x2c, 0x3c, 0x05, 0xce, 0x90, 0xb9, 0xde, 0x38, 0x3b, 0x83, 0x4d, 0x37, 0x41,
-	0x28, 0x98, 0x54, 0x82, 0x27, 0x8a, 0x63, 0xde, 0xab, 0x9b, 0xd6, 0xfe, 0xad, 0x56, 0x6b, 0x20,
-	0x98, 0xd8, 0x06, 0xba, 0xa8, 0xa7, 0x44, 0x2e, 0x71, 0xe4, 0x3d, 0x6c, 0x0a, 0x96, 0x72, 0xcc,
-	0xcb, 0xca, 0xb2, 0xb7, 0xb2, 0x5b, 0xef, 0xb7, 0xf7, 0x9e, 0xde, 0x2d, 0x4d, 0x4d, 0x43, 0x45,
-	0x59, 0xdc, 0xa6, 0xe4, 0xce, 0x0f, 0x0f, 0xc8, 0xb2, 0x09, 0xf2, 0x08, 0xda, 0x7a, 0xf6, 0x84,
-	0x71, 0x7d, 0x62, 0xa2, 0x69, 0x50, 0x88, 0x51, 0x8d, 0x2c, 0x33, 0x4f, 0x6e, 0x9a, 0x21, 0x0a,
-	0x97, 0xb3, 0x4e, 0xeb, 0x48, 0x63, 0xbd, 0xa3, 0x19, 0xcf, 0x43, 0x7e, 0x9e, 0x31, 0x33, 0x7e,
-	0x83, 0x36, 0x67, 0x3c, 0x3f, 0x39, 0xcf, 0x98, 0xee, 0x93, 0x8a, 0x15, 0x76, 0x7f, 0x2b, 0xb6,
-	0x4f, 0x13, 0x66, 0x81, 0x8f, 0x61, 0xcd, 0x88, 0x46, 0x59, 0x16, 0x47, 0xc9, 0xa7, 0x5e, 0xc3,
-	0xee, 0x4f, 0xeb, 0x3a, 0x6a, 0xe7, 0x23, 0xdc, 0x5b, 0x1a, 0x8c, 0x6c, 0xc1, 0xaa, 0x1d, 0xcd,
-	0xed, 0xd0, 0x21, 0xcd, 0x17, 0x82, 0x4d, 0xf9, 0x57, 0xe3, 0xb0, 0x45, 0x1d, 0xd2, 0xfc, 0x17,
-	0xc6, 0xd3, 0x0b, 0x65, 0xdc, 0xd5, 0xa8, 0x43, 0xfe, 0x31, 0xac, 0xdd, 0xe4, 0x37, 0x9a, 0xa6,
-	0xe4, 0xa5, 0xf5, 0x53, 0x68, 0x82, 0x33, 0xd9, 0xf3, 0x4c, 0xde, 0xf7, 0xef, 0xcc, 0xdb, 0xd8,
-	0x1c, 0xbb, 0x4a, 0xff, 0x67, 0x0d, 0xd6, 0x5d, 0xac, 0x07, 0xd6, 0xe3, 0x3f, 0x7d, 0x6a, 0xfb,
-	0x00, 0x91, 0x91, 0x8d, 0x62, 0x17, 0x71, 0x67, 0x6f, 0xab, 0xdc, 0x71, 0x70, 0x73, 0x4a, 0x4b,
-	0x95, 0xe4, 0x09, 0x74, 0x62, 0x54, 0x32, 0x14, 0xec, 0xf3, 0x25, 0x93, 0x8a, 0x9d, 0xbb, 0x15,
-	0xac, 0x6b, 0x96, 0xce, 0x49, 0x32, 0x81, 0xae, 0x4d, 0x30, 0xca, 0xc2, 0xc8, 0xbd, 0xb5, 0x86,
-	0x99, 0xbd, 0xf2, 0x8c, 0x2b, 0x03, 0xba, 0xf7, 0x16, 0x65, 0x16, 0xd2, 0x0d, 0x51, 0xc1, 0x72,
-	0x27, 0x85, 0x4e, 0xb5, 0xe4, 0xaf, 0xd7, 0xb6, 0xec, 0xbe, 0x7e, 0x87, 0x7b, 0xff, 0x9b, 0x07,
-	0x1d, 0x8a, 0x31, 0x8e, 0x04, 0x16, 0xee, 0xa6, 0x6a, 0x5e, 0xde, 0x1f, 0xe7, 0x35, 0x84, 0x8d,
-	0xf9, 0x27, 0x3d, 0xcf, 0xa1, 0x66, 0x72, 0xd8, 0xfe, 0x6d, 0x0e, 0xb4, 0x23, 0xcb, 0x50, 0x3e,
-	0x0b, 0x00, 0x16, 0xea, 0x64, 0x03, 0xda, 0xef, 0x4e, 0x27, 0xe3, 0xc3, 0xd1, 0xc9, 0xd1, 0xc9,
-	0xe1, 0xab, 0xee, 0x7f, 0xa4, 0x09, 0xf5, 0xb3, 0xc3, 0x49, 0xd7, 0x23, 0xab, 0x50, 0x3b, 0x7d,
-	0xd3, 0xad, 0x0d, 0xf7, 0x3f, 0xbc, 0x48, 0xf1, 0x46, 0x3e, 0x40, 0x91, 0x0e, 0x4a, 0xff, 0x49,
-	0x9e, 0x4f, 0x45, 0x34, 0x30, 0x7f, 0xc8, 0x41, 0x8a, 0xa5, 0x93, 0x78, 0xd5, 0x90, 0xcf, 0x7f,
-	0x05, 0x00, 0x00, 0xff, 0xff, 0x3f, 0x25, 0x8f, 0xd8, 0x56, 0x05, 0x00, 0x00,
+	// 665 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xcb, 0x6e, 0xd3, 0x40,
+	0x14, 0xc5, 0x79, 0x34, 0xe4, 0xa6, 0x4d, 0xd3, 0x09, 0x54, 0x69, 0x01, 0x51, 0x2c, 0x21, 0x22,
+	0x16, 0x8e, 0x54, 0x50, 0xc5, 0x86, 0x45, 0x93, 0xb6, 0xb4, 0x9b, 0x12, 0x4d, 0x40, 0xa2, 0xb0,
+	0xb0, 0x6c, 0x67, 0xe2, 0x8e, 0xb0, 0x3d, 0x66, 0x66, 0x42, 0x69, 0xbf, 0x81, 0x5f, 0xe1, 0xc7,
+	0xf8, 0x03, 0x76, 0x68, 0x1e, 0x69, 0x9c, 0xa6, 0x48, 0x20, 0xb1, 0xcb, 0x3d, 0x33, 0xf7, 0xe4,
+	0xdc, 0x73, 0x8f, 0x07, 0x1e, 0x46, 0xe7, 0x9c, 0xa5, 0x74, 0x9a, 0x32, 0xd1, 0x0b, 0x99, 0xf4,
+	0x45, 0x14, 0x24, 0x34, 0x8b, 0xbd, 0x9c, 0x33, 0xc9, 0x10, 0xcc, 0x4f, 0xdd, 0x63, 0xa8, 0xf5,
+	0x99, 0x7c, 0x77, 0x99, 0x13, 0xb4, 0x05, 0x77, 0xf5, 0x5d, 0x7a, 0x45, 0x3a, 0xce, 0x8e, 0xd3,
+	0xad, 0xe3, 0x5a, 0xc8, 0xe4, 0x88, 0x5e, 0x11, 0xe4, 0xc2, 0x5a, 0xc4, 0x38, 0x11, 0x7e, 0x4e,
+	0xb8, 0x1f, 0x32, 0xd9, 0x29, 0xed, 0x38, 0xdd, 0x2a, 0x6e, 0x68, 0x70, 0x48, 0x78, 0x9f, 0x49,
+	0xf7, 0x35, 0x6c, 0x8c, 0x2e, 0x02, 0x9e, 0xd2, 0x2c, 0x3e, 0xa0, 0x29, 0xc9, 0x04, 0x65, 0x19,
+	0x42, 0x50, 0xc9, 0x82, 0x74, 0xc6, 0xa7, 0x7f, 0xa3, 0x7b, 0x50, 0xfd, 0x1a, 0x24, 0x53, 0xa2,
+	0x49, 0xea, 0xd8, 0x14, 0xee, 0xcf, 0x0a, 0xd4, 0xfb, 0x4c, 0x0e, 0x59, 0x42, 0xa3, 0x4b, 0xf4,
+	0x00, 0xea, 0x4a, 0x4b, 0xcc, 0xd9, 0x34, 0xb7, 0xcd, 0x4a, 0xdc, 0x1b, 0x55, 0x23, 0xcf, 0x08,
+	0x95, 0x97, 0xb9, 0xe1, 0x68, 0xec, 0xb6, 0xbd, 0xf9, 0x48, 0x9e, 0x9d, 0x47, 0xab, 0xd7, 0x83,
+	0x9d, 0x41, 0xdb, 0x1a, 0xe0, 0x73, 0x22, 0x24, 0xa7, 0x91, 0xa4, 0x2c, 0xeb, 0x94, 0x75, 0x6b,
+	0xf7, 0x46, 0xab, 0x11, 0xe0, 0x8d, 0x4c, 0x03, 0x9e, 0xdf, 0xc7, 0x48, 0x2c, 0x61, 0xe8, 0x03,
+	0xb4, 0x39, 0x89, 0x29, 0xcb, 0x8a, 0xcc, 0xa2, 0x53, 0xd9, 0x29, 0x77, 0x1b, 0xbb, 0xcf, 0x6e,
+	0xa7, 0xc6, 0xba, 0x61, 0x81, 0x99, 0xdf, 0x84, 0x04, 0x3a, 0x85, 0xb6, 0xb0, 0x76, 0xfa, 0xe3,
+	0x99, 0x9f, 0xa2, 0x53, 0xd5, 0xcc, 0x8f, 0x8a, 0xcc, 0x4b, 0xae, 0x63, 0x24, 0x6e, 0x42, 0x62,
+	0xfb, 0x87, 0x03, 0x68, 0x79, 0x28, 0xf4, 0x18, 0x1a, 0xca, 0xcb, 0x88, 0x50, 0x75, 0xa2, 0xad,
+	0xae, 0x62, 0x08, 0x99, 0x1c, 0x18, 0x64, 0xb6, 0x89, 0x49, 0xc2, 0x18, 0xb7, 0x6b, 0x57, 0xee,
+	0x1f, 0xa9, 0x5a, 0x45, 0x26, 0xa5, 0x99, 0x4f, 0xc7, 0x09, 0xd1, 0x76, 0x56, 0x71, 0x2d, 0xa5,
+	0xd9, 0xc9, 0x38, 0x21, 0xaa, 0x4f, 0x48, 0x92, 0x9b, 0x38, 0x55, 0x4c, 0x9f, 0x02, 0x74, 0x9e,
+	0x9e, 0xc0, 0xaa, 0x26, 0x0d, 0x92, 0x24, 0x0c, 0xa2, 0xcf, 0x9d, 0xaa, 0x89, 0x93, 0xe2, 0xb5,
+	0xd0, 0xf6, 0x27, 0xd8, 0x58, 0x32, 0x0a, 0x6d, 0xc2, 0x8a, 0xb1, 0xca, 0x66, 0xc2, 0x56, 0x0a,
+	0xcf, 0x39, 0x99, 0xd0, 0x6f, 0x36, 0x53, 0xb6, 0x52, 0xf8, 0x05, 0xa1, 0xf1, 0xb9, 0xd4, 0xea,
+	0x4a, 0xd8, 0x56, 0xee, 0x31, 0xac, 0x5e, 0xef, 0x63, 0x30, 0x89, 0xd1, 0x2b, 0xa3, 0x27, 0x57,
+	0x00, 0x25, 0xa2, 0xe3, 0x68, 0x97, 0xef, 0xdf, 0xba, 0x3f, 0x2d, 0x73, 0x68, 0x6f, 0xba, 0xbf,
+	0x4a, 0xb0, 0x66, 0x6d, 0xdd, 0x37, 0x1a, 0xff, 0x6b, 0x74, 0xf7, 0x00, 0x02, 0x4d, 0x1b, 0x84,
+	0xd6, 0xe2, 0xe6, 0xee, 0x66, 0xb1, 0x63, 0xff, 0xfa, 0x14, 0x17, 0x6e, 0xa2, 0xa7, 0xd0, 0x0c,
+	0x99, 0x14, 0x3e, 0x27, 0x5f, 0xa6, 0x44, 0x48, 0x32, 0xb6, 0x2b, 0x58, 0x53, 0x28, 0x9e, 0x81,
+	0x68, 0x04, 0x2d, 0xe3, 0x60, 0x90, 0xf8, 0x81, 0xcd, 0xae, 0x49, 0xd8, 0xc2, 0x67, 0xb1, 0x30,
+	0xa0, 0xcd, 0x6f, 0x90, 0x98, 0x12, 0xaf, 0xf3, 0x85, 0x5a, 0x6c, 0xc7, 0xd0, 0x5c, 0xbc, 0xf2,
+	0xcf, 0x6b, 0x5b, 0x56, 0x5f, 0xbe, 0x45, 0xbd, 0xfb, 0xdd, 0x81, 0x26, 0x66, 0x21, 0x1b, 0x70,
+	0x96, 0xdb, 0x7f, 0x5a, 0xf4, 0xcb, 0xf9, 0x6b, 0xbf, 0xfa, 0xb0, 0x3e, 0x7b, 0x22, 0x66, 0x3e,
+	0x94, 0xb4, 0x0f, 0x5b, 0x7f, 0xf4, 0x01, 0x37, 0x45, 0xb1, 0x14, 0xcf, 0x3d, 0x80, 0x39, 0x3b,
+	0x5a, 0x87, 0xc6, 0xfb, 0xd3, 0xd1, 0xf0, 0x70, 0x70, 0x72, 0x74, 0x72, 0x78, 0xd0, 0xba, 0x83,
+	0x6a, 0x50, 0x3e, 0x3b, 0x1c, 0xb5, 0x1c, 0xb4, 0x02, 0xa5, 0xd3, 0xb7, 0xad, 0x52, 0x7f, 0xef,
+	0xe3, 0xcb, 0x98, 0x5d, 0xd3, 0x7b, 0x8c, 0xc7, 0xbd, 0xc2, 0xb3, 0x4d, 0xb3, 0x09, 0x0f, 0x7a,
+	0xfa, 0xc1, 0xee, 0xc5, 0xac, 0x70, 0x12, 0xae, 0x68, 0xf0, 0xc5, 0xef, 0x00, 0x00, 0x00, 0xff,
+	0xff, 0x21, 0x76, 0xf9, 0xca, 0xe5, 0x05, 0x00, 0x00,
 }
diff --git a/src/chromiumos/bot_scaling.proto b/src/chromiumos/bot_scaling.proto
index b2f4a39..8be5ce0 100644
--- a/src/chromiumos/bot_scaling.proto
+++ b/src/chromiumos/bot_scaling.proto
@@ -17,6 +17,14 @@
     int32 cores_per_bot = 2;
 }
 
+// Defines Swarming dimensions associated with a bot group.
+message SwarmingDimension {
+    // Dimesion name
+    string name = 1;
+    // Dimension value
+    string value = 2;
+}
+
 // Bot Policy to apply to a bot group.
 message BotPolicy {
     // Bot group controlled by this policy, like, 'cq', 'postsubmit',...
@@ -55,6 +63,8 @@
         float weight = 3;
     }
     repeated RegionRestriction region_restrictions = 4;
+    // A set of dimensions used to validate current Swarming allocations.
+    repeated SwarmingDimension swarming_dimensions = 5;
 }
 
 // Configures the root message.
@@ -107,4 +117,4 @@
 
     // List of an action per bot group scaled by RoboCrop.
     repeated ScalingAction scaling_actions = 2;
-}
+}
\ No newline at end of file