Hi all, Hobbeswalsh on IRC has discovered a backward compatibility issue in 0.24.0, preventing 0.23.x clients working well with 0.24.0 servers. Specifically, you can''t specify relationships to builtin resources when the client is 0.23.x, although specifying relationships to defined resources still works. The problem is that prior to 0.24.0 there was no central class normalizing resource references, which meant that every class that handled them kinda got to pick its own standards. Sometimes types were capitalized, sometimes not, sometimes they had to be, sometimes it didn''t matter, etc. In 0.24.0, I provided a consistency class (lib/puppet/resource_reference.rb) and I use that everywhere. However, this consistency breaks in 0.23.x, because of its own inconsistenty. The specific problem in this case is that the resource type (e.g., File) is being sent to the client capitalized, but it expects them lower-case. I was hoping it would be a simple fix, but it looks like the simple fix (downcasing the type) inverts the failure: Builtin types work but defined types now fail, because (yay) they apparently *only* work with capitalized types. So, I''ve got a couple of choices: * Ignore the compatibility problems. This isn''t a very good choice, because it''s just not really reasonable to expect everyone to upgrade the whole network at once, but on the other hand, in the current state it looks like people can run 0.24.0 clients against 0.23.2 servers with no problems, so I could maybe just declare that as the way to upgrade in this case. I''ve already stated that when we switch to REST I''m only concerned about old clients running against new servers, which is the opposite of this solution, which I think is kinda lame, but we could change our standard upgrade path, I guess. * Spend a good bit of time (probably a couple of days) going through and providing something like per-version specificity. This would make sure each client got exactly the version it can handle, but... I think this would kinda suck. In particular, nearly all of the code related to this stuff is just going away when we switch to REST, so I don''t want to spend a bunch of time making this all work and then throw it all away. * Release 0.23.3 with a couple of other important fixes plus a forward compatibility fix that solves this particular problem. This is kinda hackish, since why upgrade to 0.23.3 if you can just go all the way to 0.24.0? That being said, it might assuage some people''s concerns. What do people think should be done? -- Beware of all enterprises that require new clothes. -- Henry David Thoreau --------------------------------------------------------------------- Luke Kanies | http://reductivelabs.com | http://madstop.com
Luke, in my opinion there is nothing wrong with having certain version requirements between server and client and simply failing gracefully if those requirements are not met. But failing should happen in the beginning of a run so that you do not run the risk of the client ending up in a limbo state. /peter On 18/12/2007, Luke Kanies <luke@madstop.com> wrote:> Hi all, > > Hobbeswalsh on IRC has discovered a backward compatibility issue in > 0.24.0, preventing 0.23.x clients working well with 0.24.0 servers. > Specifically, you can''t specify relationships to builtin resources > when the client is 0.23.x, although specifying relationships to > defined resources still works. > > The problem is that prior to 0.24.0 there was no central class > normalizing resource references, which meant that every class that > handled them kinda got to pick its own standards. Sometimes types > were capitalized, sometimes not, sometimes they had to be, sometimes > it didn''t matter, etc. In 0.24.0, I provided a consistency class > (lib/puppet/resource_reference.rb) and I use that everywhere. > However, this consistency breaks in 0.23.x, because of its own > inconsistenty. > > The specific problem in this case is that the resource type (e.g., > File) is being sent to the client capitalized, but it expects them > lower-case. > > I was hoping it would be a simple fix, but it looks like the simple > fix (downcasing the type) inverts the failure: Builtin types work > but defined types now fail, because (yay) they apparently *only* work > with capitalized types. > > So, I''ve got a couple of choices: > > * Ignore the compatibility problems. This isn''t a very good choice, > because it''s just not really reasonable to expect everyone to upgrade > the whole network at once, but on the other hand, in the current > state it looks like people can run 0.24.0 clients against 0.23.2 > servers with no problems, so I could maybe just declare that as the > way to upgrade in this case. I''ve already stated that when we switch > to REST I''m only concerned about old clients running against new > servers, which is the opposite of this solution, which I think is > kinda lame, but we could change our standard upgrade path, I guess. > > * Spend a good bit of time (probably a couple of days) going through > and providing something like per-version specificity. This would > make sure each client got exactly the version it can handle, but... I > think this would kinda suck. In particular, nearly all of the code > related to this stuff is just going away when we switch to REST, so I > don''t want to spend a bunch of time making this all work and then > throw it all away. > > * Release 0.23.3 with a couple of other important fixes plus a > forward compatibility fix that solves this particular problem. This > is kinda hackish, since why upgrade to 0.23.3 if you can just go all > the way to 0.24.0? That being said, it might assuage some people''s > concerns. > > What do people think should be done? > > -- > Beware of all enterprises that require new clothes. > -- Henry David Thoreau > --------------------------------------------------------------------- > Luke Kanies | http://reductivelabs.com | http://madstop.com > > > _______________________________________________ > Puppet-users mailing list > Puppet-users@madstop.com > https://mail.madstop.com/mailman/listinfo/puppet-users >-- /peter
On Dec 19, 2007, at 12:14 AM, Peter Hoeg wrote:> Luke, > > in my opinion there is nothing wrong with having certain version > requirements between server and client and simply failing gracefully > if those requirements are not met. But failing should happen in the > beginning of a run so that you do not run the risk of the client > ending up in a limbo state.It looks like this was a bit of a red herring, as I was able to find a hackish workaround. I think in general newer servers should always work with older clients, but I''m not going to worry about new clients working with old servers. -- Finn''s Law: Uncertainty is the final test of innovation. --------------------------------------------------------------------- Luke Kanies | http://reductivelabs.com | http://madstop.com