[openstack-dev] [olso] [cinder] upgrade issues in lock_path in cinder after oslo utils sync
Mark McLoughlin
markmc at redhat.com
Mon Dec 9 22:18:09 UTC 2013
On Mon, 2013-12-09 at 11:11 -0600, Ben Nemec wrote:
> On 2013-12-09 10:55, Sean Dague wrote:
> > On 12/09/2013 11:38 AM, Clint Byrum wrote:
> >> Excerpts from Sean Dague's message of 2013-12-09 08:17:45 -0800:
> >>> On 12/06/2013 05:40 PM, Ben Nemec wrote:
> >>>> On 2013-12-06 16:30, Clint Byrum wrote:
> >>>>> Excerpts from Ben Nemec's message of 2013-12-06 13:38:16 -0800:
> >>>>>>
> >>>>>>
> >>>>>> On 2013-12-06 15:14, Yuriy Taraday wrote:
> >>>>>>
> >>>>>>> Hello, Sean.
> >>>>>>>
> >>>>>>> I get the issue with upgrade path. User doesn't want to update
> >>>>>> config unless one is forced to do so.
> >>>>>>> But introducing code that weakens security and let it stay is an
> >>>>>> unconditionally bad idea.
> >>>>>>> It looks like we have to weigh two evils: having troubles
> >>>>>>> upgrading
> >>>>>> and lessening security. That's obvious.
> >>>>>>>
> >>>>>>> Here are my thoughts on what we can do with it:
> >>>>>>> 1. I think we should definitely force user to do appropriate
> >>>>>> configuration to let us use secure ways to do locking.
> >>>>>>> 2. We can wait one release to do so, e.g. issue a deprecation
> >>>>>> warning now and force user to do it the right way later.
> >>>>>>> 3. If we are going to do 2. we should do it in the service that
> >>>>>>> is
> >>>>>> affected not in the library because library shouldn't track
> >>>>>> releases
> >>>>>> of an application that uses it. It should do its thing and do it
> >>>>>> right (secure).
> >>>>>>>
> >>>>>>> So I would suggest to deal with it in Cinder by importing
> >>>>>> 'lock_path' option after parsing configs and issuing a deprecation
> >>>>>> warning and setting it to tempfile.gettempdir() if it is still
> >>>>>> None.
> >>>>>>
> >>>>>> This is what Sean's change is doing, but setting lock_path to
> >>>>>> tempfile.gettempdir() is the security concern.
> >>>>>
> >>>>> Yuriy's suggestion is that we should let Cinder override the config
> >>>>> variable's default with something insecure. Basically only
> >>>>> deprecate
> >>>>> it in Cinder's world, not oslo's. That makes more sense from a
> >>>>> library
> >>>>> standpoint as it keeps the library's expected interface stable.
> >>>>
> >>>> Ah, I see the distinction now. If we get this split off into
> >>>> oslo.lockutils (which I believe is the plan), that's probably what
> >>>> we'd
> >>>> have to do.
> >>>>
> >>>>>>
> >>>>>> Since there seems to be plenty of resistance to using /tmp by
> >>>>>> default,
> >>>>>> here is my proposal:
> >>>>>>
> >>>>>> 1) We make Sean's change to open files in append mode. I think we
> >>>>>> can
> >>>>>> all agree this is a good thing regardless of any config changes.
> >>>>>>
> >>>>>> 2) Leave lockutils broken in Icehouse if lock_path is not set, as
> >>>>>> I
> >>>>>> believe Mark suggested earlier. Log an error if we find that
> >>>>>> configuration. Users will be no worse off than they are today, and
> >>>>>> if
> >>>>>> they're paying attention they can get the fixed lockutils behavior
> >>>>>> immediately.
> >>>>>
> >>>>> Broken how? Broken in that it raises an exception, or broken in
> >>>>> that it
> >>>>> carries a security risk?
> >>>>
> >>>> Broken as in external locks don't actually lock. If we fall back to
> >>>> using a local semaphore it might actually be a little better because
> >>>> then at least the locks work within a single process, whereas before
> >>>> there was no locking whatsoever.
> >>>
> >>> Right, so broken as in "doesn't actually locks, potentially
> >>> completely
> >>> scrambles the user's data, breaking them forever."
> >>>
> >>
> >> Things I'd like to see OpenStack do in the short term, ranked in
> >> ascending
> >> order of importance:
> >>
> >> 4) Upgrade smoothly.
> >> 3) Scale.
> >> 2) Help users manage external risks.
> >> 1) Not do what Sean described above.
> >>
> >> I mean, how can we even suggest silently destroying integrity?
> >>
> >> I suggest merging Sean's patch and putting a warning in the release
> >> notes that running without setting this will be deprecated in the next
> >> release. If that is what this is preventing this debate should not
> >> have
> >> happened, and I sincerely apologize for having delayed it. I believe
> >> my
> >> mistake was assuming this was something far more trivial than "without
> >> this patch we destroy users' data".
> >>
> >> I thought we were just talking about making upgrades work. :-P
> >
> > Honestly, I haven't looked exactly how bad the corruption would be. But
> > we are locking to handle something around simultaneous db access in
> > cinder, so I'm going to assume the worst here.
>
> Yeah, my understanding is that this doesn't come up much in actual use
> because lock_path is set in most production environments. Still,
> obviously not cool when your locks don't lock, which is why we made the
> unpleasant change to require lock_path. It wasn't something we did
> lightly (I even sent something to the list before it merged, although I
> got no responses at the time).
What would happen if we required each service to set a sane default
here?
e.g. for Nova, would a dir under $state_path work? It just needs to be a
directory that isn't world-writeable but is writeable by whatever user
Nova is running as.
Practically speaking, this just means that Cinder needs to do:
lockutils.set_defaults(lock_path=os.path.join(CONF.state_path, 'tmp'))
and the current behaviour of lockutils.py is fine.
Hmm, that feels like I'm missing something?
Mark.
More information about the OpenStack-dev
mailing list