// Updates the parent properties- size or acl or both. If all required properties have been updated for the parent then recursively move up the tree and keep doing the same private void UpdateParentProperty(PropertyTreeNode currentNode, bool firstTurn) { if (currentNode.CheckAndUpdateParentProperties(_manager.GetAclProperty, _manager.GetSizeProperty, firstTurn)) { if (PropertyManager.PropertyJobLog.IsDebugEnabled) { var pn = currentNode.ParentNode; PropertyManager.PropertyJobLog.Debug( $"{JobType()}.UpdateParentPorperty, JobEntryName: {_currentNode.FullPath}, ParentNode: {pn.FullPath}, AllChildPropertiesUpdated{(_manager.GetSizeProperty ? $", TotFiles: {pn.TotChildFiles}, TotDirecs: {pn.TotChildDirec}, Totsizes: {pn.TotChildSize}" : string.Empty)}{(_manager.GetAclProperty ? $", IsAclSameForAllChilds: {pn.AllChildSameAcl}" : string.Empty)}"); } // Everything below currentNode.ParentNode is done- now put job for dumping EnqueueWritingJobForAllChilds(currentNode.ParentNode); if (currentNode.ParentNode.DepthLevel == 0) { _manager.ConsumerQueue.Add(new PoisonJob()); } else { UpdateParentProperty(currentNode.ParentNode, false); } } else { if (PropertyManager.PropertyJobLog.IsDebugEnabled) { var pn = currentNode.ParentNode; PropertyManager.PropertyJobLog.Debug( $"{JobType()}.UpdateParentPorperty, JobEntryNode: {_currentNode.FullPath}, ParentNode: {pn.FullPath}{(_manager.GetSizeProperty ? $", TotChildSizeDone: {pn.GetNumChildDirectoryProcessed()}/{pn.ChildDirectoryNodes.Count}, TotFiles: {pn.TotChildFiles}, TotDirecs: {pn.TotChildDirec}, Totsizes: {pn.TotChildSize}" : string.Empty)}{(_manager.GetAclProperty ? $", TotChildSizeDone: {pn.GetNumChildsAclProcessed()}/{pn.ChildDirectoryNodes.Count + pn.ChildFileNodes.Count}, IsAclSameForAllChilds: {pn.AllChildSameAcl}" : string.Empty)}"); } } }
// Updates the parent properties- size or acl or both. If all required properties have been updated for the parent then recursively move up the tree and keep doing the same private void UpdateParentProperty(PropertyTreeNode currentNode, bool firstTurn) { if (currentNode.CheckAndUpdateParentProperties(_manager.GetAclProperty, _manager.GetSizeProperty, firstTurn)) { // Everything below currentNode.ParentNode is done- now put job for dumping EnqueueWritingJobForAllChilds(currentNode.ParentNode); if (currentNode.ParentNode.DepthLevel == 0) { _manager.ConsumerQueue.Add(new PoisonJob()); } else { UpdateParentProperty(currentNode.ParentNode, false); } } }