Re: CC BUILDPACK_SET App Usage Events

Nicholas Calugar

We are adding STAGING_STARTED and STAGING_STOPPED app usage events:

We've also blocked staging an app's package if the app has a package that
is staging:

On Thu, Mar 24, 2016 at 6:59 PM Matthew Sykes <matthew.sykes(a)>

Can you explain how staging tasks will be recorded? We have already seen a
number of custom buildpacks that use the 15 minutes of staging time in
interesting ways that consume significant resources. This is mitigated
today by the fact that the staging only occurs when the app transitions
from stopped to started so only the staging instance can execute; during
that period the desired state of the application is `started` so it's
billable time.

While I'm happy we won't be stopping apps when a new version is pushed, I
do think providers need a way to track the additional resource consumption
of staging to avoid misuse and abuse - especially given staging tasks are
typically executed with memory and disk limits that exceed those associated
with an app instance.


On Thu, Mar 24, 2016 at 5:20 PM, Nicholas Calugar <ncalugar(a)>

Hi Matthew,

Thanks for the response. When we start an app in V3, we will always know
the buildpack because we are starting the app's current droplet. The
droplet was staged with a particular buildpack, so we can record the
buildpack in the STARTED app usage event.

As promised, a couple follow up questions:

If we record the buildpack_guid in the STARTED event, can we omit the
BUILDPACK_SET event in V3?

Currently, a V3 app must be stopped to change the current droplet. We
have an upcoming story [1] to enable changing the droplet on a running
application. Would we want to add something like a DROPLET_CHANGED app
usage event to indicate a running app is now using a different buildpack?



Nicholas Calugar
CAPI Product Manager
Pivotal Software, Inc.


On Wed, Mar 23, 2016 at 7:34 PM Matthew Sykes <matthew.sykes(a)>

The buildpack set event was implemented to enable usage based billing
for buildpack applications where the rates differed by the buildpack used
to stage the application.

When staging an application in /v2, if a buildpack is not specified, we
don't know which buildpack will stage the application until after the
detect phase of staging has occurred. That means at the time the usage
event was captured for the transition to start, the buildpack was

The buildpack set event makes that information available to billing
systems after staging completes.

On Tue, Mar 22, 2016 at 8:03 PM, Nicholas Calugar <ncalugar(a)>

Hi CF-Dev,

We are continuing work on the Cloud Controller V3 API and had a
question about a particular App Usage Event we write as part of V2, the
BUILDPACK_SET event. The test[1] around this indicates that we write the
app usage event when staging completes and the app is still started. In V2,
apps, packages, and droplets are very tightly coupled, so writing this
event here makes sense.

In V3, apps, packages, and droplets are first class resources and we
don't stage apps, we stage packages to create droplets. Furthermore,
staging with a particular buildpack does not affect the app until the
droplet is assigned to the app as the current droplet and the current
droplet can be changed to any valid droplet for the app. Staging completion
and the app being started no longer seem to correlate to the buildpack
being "set".

With the above differences, we are hoping to understand the use-case
around the BUILDPACK_SET event so we can correctly preserve the desired
behavior for V3. I'll likely have follow up questions, but the first thing
I'd like to know is what BUILDPACK_SET indicates to downstream billing



Nicholas Calugar
CAPI Product Manager
Pivotal Software, Inc.


Matthew Sykes

Matthew Sykes

Join { to automatically receive all group messages.