[openstack-dev] [olso] [cinder] upgrade issues in lock_path in cinder after oslo utils sync

Ben Nemec openstack at nemebean.com
Mon Dec 9 17:11:48 UTC 2013

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).


More information about the OpenStack-dev mailing list