Re: [openstack-dev] How to stage client major releases in Gerrit?

2013-11-26 Thread Thierry Carrez
Mark Washenberger wrote:
  FWIW, I don't think the changes glanceclient needs in v1 will
 break the
  'B' case above. But it does raise a question--if they did, would it be
  sufficient to backport a change to adapt old supported stable B
 versions
  of, say, Nova, to work with the v1 client? Honestly asking, a big
 ol' NO
  is okay.
 
 I'm not sure I follow all the pronouns. Could you re-state this again, I
 think I know what you're asking, but I'd like to be sure.
 
 
 Sorry for being so vague. I'll try to be specific.
 
 Branch nova/stable/folsom depends on python-glanceclient/master. Suppose
 we find that nova/stable/folsom testing is broken when we stage
 (hopefully before merging) the breaking changes that are part of the
 python-glanceclient v1.0.0 release. Would it be acceptable in this case
 to have a compatibility patch to nova/stable/folsom? Or will the only
 option be to modify the python-glanceclient patch to maintain compatibility?

I think that would be an acceptable backport, with bonus points if you
can make sure it doesn't break old versions of the libs that could still
be used with stable/folsom. (That's a theoretical example though, since
we don't have a stable/folsom maintained branch anymore).

-- 
Thierry Carrez (ttx)

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] How to stage client major releases in Gerrit?

2013-11-25 Thread Mark Washenberger
On Fri, Nov 22, 2013 at 6:28 PM, Monty Taylor mord...@inaugust.com wrote:



 On 11/22/2013 06:55 PM, Mark Washenberger wrote:
 
 
 
  On Fri, Nov 22, 2013 at 1:13 PM, Robert Collins
  robe...@robertcollins.net mailto:robe...@robertcollins.net wrote:
 
  On 22 November 2013 22:31, Thierry Carrez thie...@openstack.org
  mailto:thie...@openstack.org wrote:
   Robert Collins wrote:
   I don't understand why branches would be needed here *if* the
  breaking
   changes don't impact any supported release of OpenStack.
  
   Right -- the trick is what does supported mean in that case.
  
   When the client libraries were first established as separate
   deliverables, they came up with a blanket statement that the latest
   version could always be used with *any* version of openstack you
 may
   have. The idea being, if some public cloud was still stuck in
  pre-diablo
   times, you could still use the same library to address both this
  public
   cloud and the one which was 2 weeks behind Havana HEAD.
 
  Huh. There are two different directions we use the client in.
 
  Client install - cloud API (of arbitrary version A)
 
  Server install (of arbitrary version B) using the Python library -
  cloud API (version B)
 
  From a gating perspective I think we want to check
  that:
   - we can use the client against some set of cloud versions A
   - that some set of version B where servers running cloud version B
  can use the client against cloud version B
 
  But today we don't test against ancient versions of A or B.
 
  If we were to add tests for such scenarios, I'd strongly argue that
 we
  only add then for case A. Where we are using the client lib in an
  installed cloud, we don't need to test that it can still be used
  against pre-diablo etc: such installed clouds can keep using the old
  client lib.
 
 
  I'm afraid that if a critical bug is found in the old client lib, the
  current path for fixing it is to ask people to update to the latest
  client version, even internally to their old cloud. So would that cause
  a branch for backporting fixes?

 The plan is that the current client libs should always be installable.
 So we would not (and never have) make a branch for backporting fixes.


Yes. I think wires are a bit crossed here, but you and I agree. It seemed
to me that Robert was suggesting that old clouds can internally keep using
old versions of client libs. Which seems wrong since we don't do backports,
so old clouds using old libs would never get security updates.



  FWIW, I don't think the changes glanceclient needs in v1 will break the
  'B' case above. But it does raise a question--if they did, would it be
  sufficient to backport a change to adapt old supported stable B versions
  of, say, Nova, to work with the v1 client? Honestly asking, a big ol' NO
  is okay.

 I'm not sure I follow all the pronouns. Could you re-state this again, I
 think I know what you're asking, but I'd like to be sure.


Sorry for being so vague. I'll try to be specific.

Branch nova/stable/folsom depends on python-glanceclient/master. Suppose we
find that nova/stable/folsom testing is broken when we stage (hopefully
before merging) the breaking changes that are part of the
python-glanceclient v1.0.0 release. Would it be acceptable in this case to
have a compatibility patch to nova/stable/folsom? Or will the only option
be to modify the python-glanceclient patch to maintain compatibility?


Thanks!
___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] How to stage client major releases in Gerrit?

2013-11-22 Thread Thierry Carrez
Robert Collins wrote:
 I don't understand why branches would be needed here *if* the breaking
 changes don't impact any supported release of OpenStack.

Right -- the trick is what does supported mean in that case.

When the client libraries were first established as separate
deliverables, they came up with a blanket statement that the latest
version could always be used with *any* version of openstack you may
have. The idea being, if some public cloud was still stuck in pre-diablo
times, you could still use the same library to address both this public
cloud and the one which was 2 weeks behind Havana HEAD.

-- 
Thierry Carrez (ttx)

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] How to stage client major releases in Gerrit?

2013-11-22 Thread Thierry Carrez
Mark Washenberger wrote:
  My question is, is there a correct way to stage breaking changes in
  Gerrit? Has some other team already dealt with this problem?
  [...]
 
 It sounds like a case where we could use a feature branch. There have
 been a number of them in the past when people wanted to incrementally
 work on new features without affecting master, and at first glance
 (haha) it sounds appropriate here.
 
 As a quick sidebar, what does a feature branch entail in today's parlance?

It can be created on request by release management members (or
infra-core team). I /think/ that by default it would get tested against
master in other branches.

-- 
Thierry Carrez (ttx)

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] How to stage client major releases in Gerrit?

2013-11-22 Thread Dolph Mathews
On Fri, Nov 22, 2013 at 3:31 AM, Thierry Carrez thie...@openstack.orgwrote:

 Robert Collins wrote:
  I don't understand why branches would be needed here *if* the breaking
  changes don't impact any supported release of OpenStack.

 Right -- the trick is what does supported mean in that case.

 When the client libraries were first established as separate
 deliverables, they came up with a blanket statement that the latest
 version could always be used with *any* version of openstack you may
 have. The idea being, if some public cloud was still stuck in pre-diablo
 times, you could still use the same library to address both this public
 cloud and the one which was 2 weeks behind Havana HEAD.


I'm curious about the historical circumstance of this requirement -- were
the services supported master, minus two releases at the time?

We're not testing more than two stable releases against the latest clients
in CI today, so I find it odd that we still bother with this claim, without
demonstrating that it's true.



 --
 Thierry Carrez (ttx)

 ___
 OpenStack-dev mailing list
 OpenStack-dev@lists.openstack.org
 http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev




-- 

-Dolph
___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] How to stage client major releases in Gerrit?

2013-11-22 Thread Robert Collins
On 22 November 2013 22:31, Thierry Carrez thie...@openstack.org wrote:
 Robert Collins wrote:
 I don't understand why branches would be needed here *if* the breaking
 changes don't impact any supported release of OpenStack.

 Right -- the trick is what does supported mean in that case.

 When the client libraries were first established as separate
 deliverables, they came up with a blanket statement that the latest
 version could always be used with *any* version of openstack you may
 have. The idea being, if some public cloud was still stuck in pre-diablo
 times, you could still use the same library to address both this public
 cloud and the one which was 2 weeks behind Havana HEAD.

Huh. There are two different directions we use the client in.

Client install - cloud API (of arbitrary version A)

Server install (of arbitrary version B) using the Python library -
cloud API (version B)

From a gating perspective I think we want to check
that:
 - we can use the client against some set of cloud versions A
 - that some set of version B where servers running cloud version B
can use the client against cloud version B

But today we don't test against ancient versions of A or B.

If we were to add tests for such scenarios, I'd strongly argue that we
only add then for case A. Where we are using the client lib in an
installed cloud, we don't need to test that it can still be used
against pre-diablo etc: such installed clouds can keep using the old
client lib.

So assuming you agree with that assertion, where do we need a branch here?

-Rob

-- 
Robert Collins rbtcoll...@hp.com
Distinguished Technologist
HP Converged Cloud

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] How to stage client major releases in Gerrit?

2013-11-22 Thread Mark Washenberger
On Fri, Nov 22, 2013 at 1:13 PM, Robert Collins
robe...@robertcollins.netwrote:

 On 22 November 2013 22:31, Thierry Carrez thie...@openstack.org wrote:
  Robert Collins wrote:
  I don't understand why branches would be needed here *if* the breaking
  changes don't impact any supported release of OpenStack.
 
  Right -- the trick is what does supported mean in that case.
 
  When the client libraries were first established as separate
  deliverables, they came up with a blanket statement that the latest
  version could always be used with *any* version of openstack you may
  have. The idea being, if some public cloud was still stuck in pre-diablo
  times, you could still use the same library to address both this public
  cloud and the one which was 2 weeks behind Havana HEAD.

 Huh. There are two different directions we use the client in.

 Client install - cloud API (of arbitrary version A)

 Server install (of arbitrary version B) using the Python library -
 cloud API (version B)

 From a gating perspective I think we want to check
 that:
  - we can use the client against some set of cloud versions A
  - that some set of version B where servers running cloud version B
 can use the client against cloud version B

 But today we don't test against ancient versions of A or B.

 If we were to add tests for such scenarios, I'd strongly argue that we
 only add then for case A. Where we are using the client lib in an
 installed cloud, we don't need to test that it can still be used
 against pre-diablo etc: such installed clouds can keep using the old
 client lib.


I'm afraid that if a critical bug is found in the old client lib, the
current path for fixing it is to ask people to update to the latest client
version, even internally to their old cloud. So would that cause a branch
for backporting fixes?

FWIW, I don't think the changes glanceclient needs in v1 will break the 'B'
case above. But it does raise a question--if they did, would it be
sufficient to backport a change to adapt old supported stable B versions
of, say, Nova, to work with the v1 client? Honestly asking, a big ol' NO is
okay.



 So assuming you agree with that assertion, where do we need a branch here?

 -Rob

 --
 Robert Collins rbtcoll...@hp.com
 Distinguished Technologist
 HP Converged Cloud

 ___
 OpenStack-dev mailing list
 OpenStack-dev@lists.openstack.org
 http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] How to stage client major releases in Gerrit?

2013-11-22 Thread Mark Washenberger
On Fri, Nov 22, 2013 at 12:03 PM, Jeremy Stanley fu...@yuggoth.org wrote:

 On 2013-11-22 10:34:40 +0100 (+0100), Thierry Carrez wrote:
  It can be created on request by release management members (or
  infra-core team). I /think/ that by default it would get tested against
  master in other branches.

 More details at...

 URL: https://wiki.openstack.org/wiki/GerritJenkinsGithub#Merge_Commits 


Cool. Is this documentation essentially explaining how to keep a feature
branch up to date with master? (spoiler warning: carefully use merge
commits?)



 --
 Jeremy Stanley

 ___
 OpenStack-dev mailing list
 OpenStack-dev@lists.openstack.org
 http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] How to stage client major releases in Gerrit?

2013-11-22 Thread Monty Taylor


On 11/22/2013 06:55 PM, Mark Washenberger wrote:
 
 
 
 On Fri, Nov 22, 2013 at 1:13 PM, Robert Collins
 robe...@robertcollins.net mailto:robe...@robertcollins.net wrote:
 
 On 22 November 2013 22:31, Thierry Carrez thie...@openstack.org
 mailto:thie...@openstack.org wrote:
  Robert Collins wrote:
  I don't understand why branches would be needed here *if* the
 breaking
  changes don't impact any supported release of OpenStack.
 
  Right -- the trick is what does supported mean in that case.
 
  When the client libraries were first established as separate
  deliverables, they came up with a blanket statement that the latest
  version could always be used with *any* version of openstack you may
  have. The idea being, if some public cloud was still stuck in
 pre-diablo
  times, you could still use the same library to address both this
 public
  cloud and the one which was 2 weeks behind Havana HEAD.
 
 Huh. There are two different directions we use the client in.
 
 Client install - cloud API (of arbitrary version A)
 
 Server install (of arbitrary version B) using the Python library -
 cloud API (version B)
 
 From a gating perspective I think we want to check
 that:
  - we can use the client against some set of cloud versions A
  - that some set of version B where servers running cloud version B
 can use the client against cloud version B
 
 But today we don't test against ancient versions of A or B.
 
 If we were to add tests for such scenarios, I'd strongly argue that we
 only add then for case A. Where we are using the client lib in an
 installed cloud, we don't need to test that it can still be used
 against pre-diablo etc: such installed clouds can keep using the old
 client lib.
 
 
 I'm afraid that if a critical bug is found in the old client lib, the
 current path for fixing it is to ask people to update to the latest
 client version, even internally to their old cloud. So would that cause
 a branch for backporting fixes?

The plan is that the current client libs should always be installable.
So we would not (and never have) make a branch for backporting fixes.

 FWIW, I don't think the changes glanceclient needs in v1 will break the
 'B' case above. But it does raise a question--if they did, would it be
 sufficient to backport a change to adapt old supported stable B versions
 of, say, Nova, to work with the v1 client? Honestly asking, a big ol' NO
 is okay. 

I'm not sure I follow all the pronouns. Could you re-state this again, I
think I know what you're asking, but I'd like to be sure.

 
 So assuming you agree with that assertion, where do we need a branch
 here?
 
 -Rob
 
 --
 Robert Collins rbtcoll...@hp.com mailto:rbtcoll...@hp.com
 Distinguished Technologist
 HP Converged Cloud
 
 ___
 OpenStack-dev mailing list
 OpenStack-dev@lists.openstack.org
 mailto:OpenStack-dev@lists.openstack.org
 http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
 
 
 
 
 ___
 OpenStack-dev mailing list
 OpenStack-dev@lists.openstack.org
 http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
 

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] How to stage client major releases in Gerrit?

2013-11-22 Thread Monty Taylor


On 11/22/2013 09:57 AM, Dolph Mathews wrote:
 
 On Fri, Nov 22, 2013 at 3:31 AM, Thierry Carrez thie...@openstack.org
 mailto:thie...@openstack.org wrote:
 
 Robert Collins wrote:
  I don't understand why branches would be needed here *if* the breaking
  changes don't impact any supported release of OpenStack.
 
 Right -- the trick is what does supported mean in that case.
 
 When the client libraries were first established as separate
 deliverables, they came up with a blanket statement that the latest
 version could always be used with *any* version of openstack you may
 have. The idea being, if some public cloud was still stuck in pre-diablo
 times, you could still use the same library to address both this public
 cloud and the one which was 2 weeks behind Havana HEAD.
 
 
 I'm curious about the historical circumstance of this requirement --
 were the services supported master, minus two releases at the time?
 
 We're not testing more than two stable releases against the latest
 clients in CI today, so I find it odd that we still bother with this
 claim, without demonstrating that it's true.

The design of this comes from an end-user perspective.

If Alice wants to use a cloud, Bob, Alice should download the current
python-glanceclient library, provide it with her credentials, and it
should work, regardless of what version of OpenStack Bob's operator
happens to be running.

The reason for the above is that any other approach is a TERRIBLE end
user experience. (As a person who currently is involved with running a
scalable cloud application on two OpenStack clouds that are wildly
different versions, I can tell you, needing to install different client
library versions to talk to them would be madness.

That's about outbound API versions though. That means that master
*client must always be able to speak to every extant API version.

This question is actually about python API consumption, and when we made
the policy, we did discuss that were a breaking change to be made in the
Python API, clearly the semver Major version should be bumped.

Unfortunately for this conversation, we stopped with Brian Waldon's
assertion of the major version bump and did not design a system to
handle it. We do not currently have the machinery to handle it. At the
very latest, we would need to design a modification to how zuul and
devstack-gate construct collections of changesets.

That said - we need to think about the questions raised above in terms
of support of python API. But, more importantly, we should really think
long and hard about breaking the python API, even with a major version
bump, because no matter how you do it, it's disruptive to library consumers.

 --
 Thierry Carrez (ttx)
 
 ___
 OpenStack-dev mailing list
 OpenStack-dev@lists.openstack.org
 mailto:OpenStack-dev@lists.openstack.org
 http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
 
 
 
 
 -- 
 
 -Dolph
 
 
 ___
 OpenStack-dev mailing list
 OpenStack-dev@lists.openstack.org
 http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
 

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] How to stage client major releases in Gerrit?

2013-11-21 Thread Thierry Carrez
Mark Washenberger wrote:
 [...]
 In order to mitigate that risk, I think it would make a lot of sense to
 have a place to stage and carefully consider all the breaking changes we
 want to make. I also would like to have that place be somewhere in
 Gerrit so that it fits in with our current submission and review
 process. But if that place is the 'master' branch and we take a long
 time, then we can't really release any bug fixes to the v0 series in the
 meantime.
 
 I can think of a few workarounds, but they all seem kinda bad. For
 example, we could put all the breaking changes together in one commit,
 or we could do all this prep in github.
 
 My question is, is there a correct way to stage breaking changes in
 Gerrit? Has some other team already dealt with this problem?
 [...]

It sounds like a case where we could use a feature branch. There have
been a number of them in the past when people wanted to incrementally
work on new features without affecting master, and at first glance
(haha) it sounds appropriate here. Infra team, thoughts ?

-- 
Thierry Carrez (ttx)

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] How to stage client major releases in Gerrit?

2013-11-21 Thread Robert Collins
On 22 November 2013 02:57, Monty Taylor mord...@inaugust.com wrote:




 This is a really complex one because of the gate. It's not just about
 the semver major version bump. I agree with earlier sentiment - the way
 to handle breaking changes is to bump the major version, and on the
 surface I don't have a problem with us doing that, since there is
 already a mechanism to deal with that.

 HOWEVER - it's more complex than that with us, because the client libs
 are part of our integration.

 We've already agreed on and have been operating on the assumption that
 client libs do not break rest api backwards compat. We're 3 seconds away
 from landing gating tests to ensure this is the case. The reasoning here
 is that an end user of OpenStack should not need to know what version of
 OpenStack a vendor is running - the latest python-glanceclient should
 work with diablo and it should work with icehouse. Nothing in this
 thread breaks that - I just bring it up because it's one of the overall
 design points that we'll be rubbing against.

I don't understand why branches would be needed here *if* the breaking
changes don't impact any supported release of OpenStack.

-Rob


-- 
Robert Collins rbtcoll...@hp.com
Distinguished Technologist
HP Converged Cloud

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] How to stage client major releases in Gerrit?

2013-11-21 Thread Mark Washenberger
On Thu, Nov 21, 2013 at 1:58 AM, Thierry Carrez thie...@openstack.orgwrote:

 Mark Washenberger wrote:
  [...]
  In order to mitigate that risk, I think it would make a lot of sense to
  have a place to stage and carefully consider all the breaking changes we
  want to make. I also would like to have that place be somewhere in
  Gerrit so that it fits in with our current submission and review
  process. But if that place is the 'master' branch and we take a long
  time, then we can't really release any bug fixes to the v0 series in the
  meantime.
 
  I can think of a few workarounds, but they all seem kinda bad. For
  example, we could put all the breaking changes together in one commit,
  or we could do all this prep in github.
 
  My question is, is there a correct way to stage breaking changes in
  Gerrit? Has some other team already dealt with this problem?
  [...]

 It sounds like a case where we could use a feature branch. There have
 been a number of them in the past when people wanted to incrementally
 work on new features without affecting master, and at first glance
 (haha) it sounds appropriate here.


As a quick sidebar, what does a feature branch entail in today's parlance?


 Infra team, thoughts ?

 --
 Thierry Carrez (ttx)

 ___
 OpenStack-dev mailing list
 OpenStack-dev@lists.openstack.org
 http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] How to stage client major releases in Gerrit?

2013-11-21 Thread Monty Taylor


On 11/21/2013 01:58 AM, Thierry Carrez wrote:
 Mark Washenberger wrote:
 [...]
 In order to mitigate that risk, I think it would make a lot of sense to
 have a place to stage and carefully consider all the breaking changes we
 want to make. I also would like to have that place be somewhere in
 Gerrit so that it fits in with our current submission and review
 process. But if that place is the 'master' branch and we take a long
 time, then we can't really release any bug fixes to the v0 series in the
 meantime.

 I can think of a few workarounds, but they all seem kinda bad. For
 example, we could put all the breaking changes together in one commit,
 or we could do all this prep in github.

 My question is, is there a correct way to stage breaking changes in
 Gerrit? Has some other team already dealt with this problem?
 [...]
 
 It sounds like a case where we could use a feature branch. There have
 been a number of them in the past when people wanted to incrementally
 work on new features without affecting master, and at first glance
 (haha) it sounds appropriate here. Infra team, thoughts ?

Hi!

This is a really complex one because of the gate. It's not just about
the semver major version bump. I agree with earlier sentiment - the way
to handle breaking changes is to bump the major version, and on the
surface I don't have a problem with us doing that, since there is
already a mechanism to deal with that.

HOWEVER - it's more complex than that with us, because the client libs
are part of our integration.

We've already agreed on and have been operating on the assumption that
client libs do not break rest api backwards compat. We're 3 seconds away
from landing gating tests to ensure this is the case. The reasoning here
is that an end user of OpenStack should not need to know what version of
OpenStack a vendor is running - the latest python-glanceclient should
work with diablo and it should work with icehouse. Nothing in this
thread breaks that - I just bring it up because it's one of the overall
design points that we'll be rubbing against.

Now, in the gate, without bringing backwards compat into the picture -
we test master against master, and stable/havana against stable/havana
across all the projects. If a project (like a client lib) doesn't have a
stable/havana, we use its master branch - this is how master client lib
is tested against stable/grizzly and stable/havana right now. And I
don't just mean as an end-user test - I mean that we deploy devstack for
stable/grizzly with master python-glanceclient and that's what any of
the other projects that need to talk to glance (heat, horizon) uses.

We do not pin uses of the client libs in stable branches - because we
actually explicitly want to gate on the combination, and we want to be
sure that releasing a new version of glanceclient does not break
someone's grizzly deployment.

With all of that background ...

In order to consider a set of changes that would be a major version bump
for the client libs, we're going to have to figure out what the testing
matrix looks like (as in, what do we _want_ to test with each other) and
we're going to have to figure out how to orchestrate that in the logic
that prepares sets of branches to be tested with each other in the gate.

For dev, there are two approaches - we can make a
feature/glanceclient-2.0 branch, and leave master as it is, or we can
make a stable/1.0 branch and do the breaking work on master.

If we do the stable/1.0 approach, we'd probably have to go pin
stable/grizzly and stable/havana at =2.0. Problem is, I don't know how
to tell devstack gate that stable/grizzly and stable/havana want
glanceclient stable/1.0

Alternately, if we do the feature branch, we can avoid thinking about
the stable problem for a minute, but we still gate feature branch
patches - so you'd have to figure out how to deal with the fact that the
feature branch would be gating against master of the other projects.

Why don't we just stop cross-gating on the client libs and have our
servers consume releases of our clients? Well, that's because they'd be
requesting different versions of them at different times. We need to
make sure that the client libs can't land changes that break the server
projects BEFORE they release, because otherwise the
tag/release/tag/re-release cycle would kill us.

In any case, sorry for the novel, this request is PARTICULARLY complex
to work through, as backwards incompat client library changes is a
thing we explicitly designed the integrated gate to consider would never
happen. I understand the request, and like I said, it's not unreasonable
on its face - but it's going to take some brain time from the infra team
I believe ... and fixing the current race conditions has been priority
number one this week...

That said - bear with us here - if you can hang on for a bit until we've
got some space to properly brainstorm about what the physical
possibilities are, we can come back with some suggestions and

[openstack-dev] How to stage client major releases in Gerrit?

2013-11-20 Thread Mark Washenberger
Hi folks,

The project python-glanceclient is getting close to needing a major release
in order to finally remove some long-deprecated features, and to make some
minor adjustments that are technically backwards-incompatible.

Normally, our release process works great. When we cut a release (say
1.0.0), if we realize it doesn't contain a feature we need, we can just add
the feature and release a new minor version (say 1.1.0). However, when it
comes to cutting out the fat for a major release, if we find a feature that
we failed to remove before releasing 1.0.0, we're basically screwed. We
have to keep that feature around until we feel like releasing 2.0.0.

In order to mitigate that risk, I think it would make a lot of sense to
have a place to stage and carefully consider all the breaking changes we
want to make. I also would like to have that place be somewhere in Gerrit
so that it fits in with our current submission and review process. But if
that place is the 'master' branch and we take a long time, then we can't
really release any bug fixes to the v0 series in the meantime.

I can think of a few workarounds, but they all seem kinda bad. For example,
we could put all the breaking changes together in one commit, or we could
do all this prep in github.

My question is, is there a correct way to stage breaking changes in Gerrit?
Has some other team already dealt with this problem?

DISCLAIMER:
For the purposes of this discussion, it will be utterly unproductive to
discuss the relative merits of backwards-breaking changes. Rather let's
assume that all breaking changes that would eventually land in the next
major release are necessary and have been properly communicated well in
advance. If a given breaking change is *not* proper, well that's the kind
of thing I want to catch in gerrit reviews in the staging area!

Respectully,
markwash
___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] How to stage client major releases in Gerrit?

2013-11-20 Thread Jamie Lennox
On Wed, 2013-11-20 at 15:17 -0800, Clint Byrum wrote:
 Excerpts from Mark Washenberger's message of 2013-11-20 10:14:42 -0800:
  Hi folks,
  
  The project python-glanceclient is getting close to needing a major release
  in order to finally remove some long-deprecated features, and to make some
  minor adjustments that are technically backwards-incompatible.
  
  Normally, our release process works great. When we cut a release (say
  1.0.0), if we realize it doesn't contain a feature we need, we can just add
  the feature and release a new minor version (say 1.1.0). However, when it
  comes to cutting out the fat for a major release, if we find a feature that
  we failed to remove before releasing 1.0.0, we're basically screwed. We
  have to keep that feature around until we feel like releasing 2.0.0.
  
  In order to mitigate that risk, I think it would make a lot of sense to
  have a place to stage and carefully consider all the breaking changes we
  want to make. I also would like to have that place be somewhere in Gerrit
  so that it fits in with our current submission and review process. But if
  that place is the 'master' branch and we take a long time, then we can't
  really release any bug fixes to the v0 series in the meantime.
  
  I can think of a few workarounds, but they all seem kinda bad. For example,
  we could put all the breaking changes together in one commit, or we could
  do all this prep in github.
  
  My question is, is there a correct way to stage breaking changes in Gerrit?
  Has some other team already dealt with this problem?
  
  DISCLAIMER:
  For the purposes of this discussion, it will be utterly unproductive to
  discuss the relative merits of backwards-breaking changes. Rather let's
  assume that all breaking changes that would eventually land in the next
  major release are necessary and have been properly communicated well in
  advance. If a given breaking change is *not* proper, well that's the kind
  of thing I want to catch in gerrit reviews in the staging area!
 
 I understand what you're trying to do with this disclaimer. The message
 above just _screams_ for this discussion, so why not cut it off at the
 pass? However, glanceclient being a library, not discussing the fact
 that you're breaking an established API is like not discussing ice at
 the north pole.
 
 If you want to be able to change interfaces without sending a missile
 up the tail pipe of every project who depends on your code, call it
 glanceclient2. That solves all of your stated problems from above. You can
 still deprecate glanceclient and stop maintaining it after some overlap
 time. And if users hate glanceclient2, then they can keep glanceclient
 alive with all of its warts.

Sorry, completely disagree with this. This is the point of having a
major version number in client libraries, when you need to do backward
incompatible changes then you bump the major version. You can continue
to develop the 0.x and 1.x series in parallel for some amount of time
and that's common.

If your application doesn't work with the 1.x series then you modify
your requirements to indicate this.

If this is going to be a problem in openstack then we need to figure out
a way of dealing with it because the client libraries are in general a
mess and i know that at least keystone is not far off needing to make
backward incompatible changes to start to clean it up.

Sorry about your disclaimer :)

 ___
 OpenStack-dev mailing list
 OpenStack-dev@lists.openstack.org
 http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev




___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] How to stage client major releases in Gerrit?

2013-11-20 Thread Mark Washenberger
On Wed, Nov 20, 2013 at 3:17 PM, Clint Byrum cl...@fewbar.com wrote:

 Excerpts from Mark Washenberger's message of 2013-11-20 10:14:42 -0800:
  Hi folks,
 
  The project python-glanceclient is getting close to needing a major
 release
  in order to finally remove some long-deprecated features, and to make
 some
  minor adjustments that are technically backwards-incompatible.
 
  Normally, our release process works great. When we cut a release (say
  1.0.0), if we realize it doesn't contain a feature we need, we can just
 add
  the feature and release a new minor version (say 1.1.0). However, when it
  comes to cutting out the fat for a major release, if we find a feature
 that
  we failed to remove before releasing 1.0.0, we're basically screwed. We
  have to keep that feature around until we feel like releasing 2.0.0.
 
  In order to mitigate that risk, I think it would make a lot of sense to
  have a place to stage and carefully consider all the breaking changes we
  want to make. I also would like to have that place be somewhere in Gerrit
  so that it fits in with our current submission and review process. But if
  that place is the 'master' branch and we take a long time, then we can't
  really release any bug fixes to the v0 series in the meantime.
 
  I can think of a few workarounds, but they all seem kinda bad. For
 example,
  we could put all the breaking changes together in one commit, or we could
  do all this prep in github.
 
  My question is, is there a correct way to stage breaking changes in
 Gerrit?
  Has some other team already dealt with this problem?
 
  DISCLAIMER:
  For the purposes of this discussion, it will be utterly unproductive to
  discuss the relative merits of backwards-breaking changes. Rather let's
  assume that all breaking changes that would eventually land in the next
  major release are necessary and have been properly communicated well in
  advance. If a given breaking change is *not* proper, well that's the kind
  of thing I want to catch in gerrit reviews in the staging area!

 I understand what you're trying to do with this disclaimer. The message
 above just _screams_ for this discussion, so why not cut it off at the
 pass? However, glanceclient being a library, not discussing the fact
 that you're breaking an established API is like not discussing ice at
 the north pole.


It is both a CLI and a library. I think different considerations might be
more relevant for those different areas. But this point leads to a much
larger discussion of what standards we should enforce for major revisions,
which we should probably defer for just a moment. I hope the outcome of
discussing my main point will be a space where we can flesh out such
standards with real world examples.



 If you want to be able to change interfaces without sending a missile
 up the tail pipe of every project who depends on your code, call it
 glanceclient2. That solves all of your stated problems from above. You can
 still deprecate glanceclient and stop maintaining it after some overlap
 time. And if users hate glanceclient2, then they can keep glanceclient
 alive with all of its warts.


While I think glanceclient2 is an interesting suggestion for really large,
sweeping changes, I don't think we are anywhere near that point.

Overall, I think you are unintentionally mischaracterizing the nature of
the breaking changes that are being considered--making them seem several
orders of magnitude greater and more disruptive than they actually are. For
folks who believe that under very well-defined and conservative
circumstances it is okay to make a breaking change in a major release, this
mischaracterization is going to be really confusing.

I guess if we still want to talk about when, if ever, to release a major
version of a client, maybe we could take it to another thread? The proposal
to disallow major revisions of OpenStack clients under all normal
circumstances seems like great TC fodder in any case, especially now that
I'm only a spectator.

3,
markwash
___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] How to stage client major releases in Gerrit?

2013-11-20 Thread Robert Collins
On 21 November 2013 07:14, Mark Washenberger
mark.washenber...@markwash.net wrote:
 Hi folks,

 The project python-glanceclient is getting close to needing a major release
 in order to finally remove some long-deprecated features, and to make some
 minor adjustments that are technically backwards-incompatible.

 Normally, our release process works great. When we cut a release (say
 1.0.0), if we realize it doesn't contain a feature we need, we can just add
 the feature and release a new minor version (say 1.1.0). However, when it
 comes to cutting out the fat for a major release, if we find a feature that
 we failed to remove before releasing 1.0.0, we're basically screwed. We have
 to keep that feature around until we feel like releasing 2.0.0.

 In order to mitigate that risk, I think it would make a lot of sense to have
 a place to stage and carefully consider all the breaking changes we want to
 make. I also would like to have that place be somewhere in Gerrit so that it
 fits in with our current submission and review process. But if that place is
 the 'master' branch and we take a long time, then we can't really release
 any bug fixes to the v0 series in the meantime.

 I can think of a few workarounds, but they all seem kinda bad. For example,
 we could put all the breaking changes together in one commit, or we could do
 all this prep in github.

 My question is, is there a correct way to stage breaking changes in Gerrit?
 Has some other team already dealt with this problem?


Why not just propose them to Gerrit? Get a set of reviews +2 +2 but
not APRV, and once you're satisfied you have everything, approve them
then release.

-Rob



-- 
Robert Collins rbtcoll...@hp.com
Distinguished Technologist
HP Converged Cloud

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] How to stage client major releases in Gerrit?

2013-11-20 Thread Robert Collins
On 21 November 2013 12:17, Clint Byrum cl...@fewbar.com wrote:
 Excerpts from Mark Washenberger's message of 2013-11-20 10:14:42 -0800:


 I understand what you're trying to do with this disclaimer. The message
 above just _screams_ for this discussion, so why not cut it off at the
 pass? However, glanceclient being a library, not discussing the fact
 that you're breaking an established API is like not discussing ice at
 the north pole.

Semver provides for doing breaking changes. And thats whats happening
here: things that have been deprecated for extended periods are
finally being cleaned up. Anyone using those features is already
getting deprecation warnings... totally fine for that cleanup to be
done.

-Rob
-- 
Robert Collins rbtcoll...@hp.com
Distinguished Technologist
HP Converged Cloud

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev