[ https://issues.apache.org/jira/browse/CURATOR-489?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jordan Zimmerman resolved CURATOR-489. -------------------------------------- Resolution: Fixed Fix Version/s: 4.1.0 > CreateOption.doProtected uses null protectedId when applied via > AsyncCreateBuilderImpl > -------------------------------------------------------------------------------------- > > Key: CURATOR-489 > URL: https://issues.apache.org/jira/browse/CURATOR-489 > Project: Apache Curator > Issue Type: Bug > Affects Versions: 4.0.1 > Reporter: josh gruenberg > Assignee: Jordan Zimmerman > Priority: Major > Fix For: 4.1.0 > > > When trying to apply "protection" to an async node-creation with > {{CreateOption.doProtected}}, the protection is undermined because the node > is created with {{protectionId = null}}. > The {{AsyncCreateBuilderImpl}} does pass {{doProtected = true}} to the > {{CreateBuilderImpl}} constructor. However, this constructor (incorrectly?) > assigns {{protectedId = null}}, resulting in a node-prefix of {{_c_null-}} > (because {{getProtectedPrefix}} does not validate that the provided > {{protectedId}} is non-null). This entirely undermines the effectiveness of > the protection. > {code:java} > public CreateBuilderImpl(CuratorFrameworkImpl client, CreateMode > createMode, Backgrounding backgrounding, boolean createParentsIfNeeded, > boolean createParentsAsContainers, boolean doProtected, boolean compress, > boolean setDataIfExists, List<ACL> aclList, Stat storingStat, long ttl) > { > this.client = client; > this.createMode = createMode; > this.backgrounding = backgrounding; > this.createParentsIfNeeded = createParentsIfNeeded; > this.createParentsAsContainers = createParentsAsContainers; > this.doProtected = doProtected; > this.compress = compress; > this.setDataIfExists = setDataIfExists; > protectedId = null; // *** incorrect if > doProtected?! *** > this.acling = new ACLing(client.getAclProvider(), aclList); > this.storingStat = storingStat; > this.ttl = ttl; > } > {code} > It looks to me as if that constructor should be assigning {{protectedId}} if > {{doProtected}} is true. > I wonder if the {{doProtected}} field should just be eliminated in favor a > method that checks {{protectedId != null}}, to avoid this redundant encoding > of intent? -- This message was sent by Atlassian JIRA (v7.6.3#76005)