should be able to set product/version/channel throttling easily

RESOLVED FIXED

Status

AUS Graveyard
Administration
RESOLVED FIXED
8 years ago
3 years ago

People

(Reporter: bhearsum, Assigned: morgamic)

Tracking

Firefox Tracking Flags

(Not tracked)

Details

Attachments

(1 attachment)

(Reporter)

Description

8 years ago
We wanted to gradually unthrottle the 3.5.14 beta channel when we pushed updates to it, but were thwarted by the fact that we couldn't unthrottle beta without also unthrottling the release channel -- which has a MU on it that we want to remain throttled. AUS should make this possible/easy.
I am reading the code here since it's unclear to me from the comments in config-dist.php, and I think this might actually be possible already.

It's currently possible to disable throttling for channel/version combinations:
http://mxr.mozilla.org/mozilla/source/webtools/aus/xml/inc/aus.class.php#68

Here's where it's called and how it's compared to productThrottling array:
http://mxr.mozilla.org/mozilla/source/webtools/aus/xml/index.php#109

So, I think you could do:

# Throttle Firefox 3.6.14, all channels
$productThrottling = array(
  'Firefox' => array(
    '3.6.14' => 15
  ),
)

# Disable throttling for Firefox 3.6.14 release channel only
$throttleExceptions = array(
  '3.5.14' => array (
    'release',
  ),
)
Would be nicer to read if productThrottling just let us specify channels. Also, I guess there's no way to specify "product" in throttleExceptions? Maybe morgamic knows better.

In any case, I'd like to be able to test this on a real staging server (bug 601861) but we should be able to scrape up a dev environment if you want to try it.
(In reply to comment #1)
> # Throttle Firefox 3.6.14, all channels
> $productThrottling = array(
>   'Firefox' => array(
>     '3.6.14' => 15
>   ),
> )
> 
> # Disable throttling for Firefox 3.6.14 release channel only
> $throttleExceptions = array(
>   '3.5.14' => array (

Typo there, should be '3.6.14' for both.
> So, I think you could do:
> 
> # Throttle Firefox 3.6.14, all channels
> $productThrottling = array(
>   'Firefox' => array(
>     '3.6.14' => 15
>   ),
> )
> 
> # Disable throttling for Firefox 3.6.14 release channel only
> $throttleExceptions = array(
>   '3.5.14' => array (
>     'release',
>   ),
> )

Maybe I'm wrong, but wouldn't this set betatest and releasetest to also be at 15% throttling?
It would be great to be able to set it like:

$throttleExceptions = array(
   '3.5.14' => array (
     'release' => 0,
     'beta' => 15,
     'betatest' => 100,
     'releasetest' => 100
   ),
(Reporter)

Comment 5

8 years ago
I don't think your example is what we want, though. In this scenario, we wanted:
3.5.14 beta channel: 15% of requests get updates
3.5.14 betatest/releasetest channels: 100% of requests get updates
3.5.14 all other channels (including release): 0% of requests get updates


Did I misunderstand your example?
(In reply to comment #5)
> I don't think your example is what we want, though. In this scenario, we
> wanted:
> 3.5.14 beta channel: 15% of requests get updates
> 3.5.14 betatest/releasetest channels: 100% of requests get updates
> 3.5.14 all other channels (including release): 0% of requests get updates
> 
> 
> Did I misunderstand your example?

(In reply to comment #3)
> > So, I think you could do:
> > 
> > # Throttle Firefox 3.6.14, all channels
> > $productThrottling = array(
> >   'Firefox' => array(
> >     '3.6.14' => 15
> >   ),
> > )
> > 
> > # Disable throttling for Firefox 3.6.14 release channel only
> > $throttleExceptions = array(
> >   '3.5.14' => array (
> >     'release',
> >   ),
> > )
> 
> Maybe I'm wrong, but wouldn't this set betatest and releasetest to also be at
> 15% throttling?

No misunderstanding, I was just trying to keep it simple, sorry :)


(In reply to comment #4)
> It would be great to be able to set it like:
> 
> $throttleExceptions = array(
>    '3.5.14' => array (
>      'release' => 0,
>      'beta' => 15,
>      'betatest' => 100,
>      'releasetest' => 100
>    ),

Yes I think this would do what you want.
Here I'll just attach a realistic example as a patch.
Created attachment 481045 [details] [diff] [review]
throttle beta only for 3.5.14
Attachment #481045 - Flags: review?(morgamic)
Attachment #481045 - Flags: feedback?(bhearsum)
(Reporter)

Comment 9

8 years ago
Comment on attachment 481045 [details] [diff] [review]
throttle beta only for 3.5.14

This would work, but it completely unthrottles the MU offer on the 3.5.14 release channel -- which we aren't necessarily going to want.
Attachment #481045 - Flags: review?(morgamic)
(Reporter)

Updated

8 years ago
Attachment #481045 - Flags: feedback?(bhearsum)
(In reply to comment #9)
> Comment on attachment 481045 [details] [diff] [review]
> throttle beta only for 3.5.14
> 
> This would work, but it completely unthrottles the MU offer on the 3.5.14
> release channel -- which we aren't necessarily going to want.

To make sure I'm understanding correctly: the choice you have right now is to throttle some set of channels (f.e. release, beta) at a particular number (f.e. 15) and leave the rest unthrottled, right?

And what you want is to be able to throttle release and beta at different levels, and not in lockstep like this?
(Reporter)

Comment 11

8 years ago
(In reply to comment #10)
> (In reply to comment #9)
> > Comment on attachment 481045 [details] [diff] [review] [details]
> > throttle beta only for 3.5.14
> > 
> > This would work, but it completely unthrottles the MU offer on the 3.5.14
> > release channel -- which we aren't necessarily going to want.
> 
> To make sure I'm understanding correctly: the choice you have right now is to
> throttle some set of channels (f.e. release, beta) at a particular number (f.e.
> 15) and leave the rest unthrottled, right?
> 

Correct.

> And what you want is to be able to throttle release and beta at different
> levels, and not in lockstep like this?

Exactly.
(In reply to comment #4)
> It would be great to be able to set it like:
> 
> $throttleExceptions = array(
>    '3.5.14' => array (
>      'release' => 0,
>      'beta' => 15,
>      'betatest' => 100,
>      'releasetest' => 100
>    ),

I think it would be more readable to do it more directly:

# default is 0
$productThrottling = array(
  'Firefox' => array(
    '3.5.14' => array(
      'release' => 50,
      'beta' => 15,
    ),
    '4.07b4' => array(
      'beta' => 15,
    ),  ),
);

Couldn't we then do away with $throttleExceptions entirely? I don't like how throttleExceptions doesn't look at the $product, anyway...
Depends on: 601861
(Reporter)

Comment 13

8 years ago
Yeah, that is _much_ more readable. I'm assuming the 4.07b4 (sic) block means "15% of requests on its beta channel will receive an update" as well as 100% of requests from any other channel?

One downside of explicitly needing to list channels that need throttling is that if we ever had to, say, mass-throttle all the partner channels, it would be a PITA. I don't think that outweighs the benefits, though.

Comment 14

3 years ago
A Pivotal Tracker story has been created for this Bug: https://www.pivotaltracker.com/story/show/98494596

Comment 15

3 years ago
Craig Comperatore deleted the linked story in Pivotal Tracker
(Reporter)

Comment 16

3 years ago
This is much better in Balrog.
Status: NEW → RESOLVED
Last Resolved: 3 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.