This is part of ticket #187. See #227 for benchmark comparisons. -{subsection: Analysis of Condor's use of old ClassAds} +{subsection: Analysis of HTCondor's use of old ClassAds} *: {wiki: OldClassAdUsageSummary Old ClassAd usage summary} - -A summary of the number of call sites in the Condor code for each Old {quote:ClassAds} method. +A summary of the number of call sites in the HTCondor code for each Old {quote:ClassAds} method. *: {wiki: OldClassAdUsageDetails Old ClassAd usage details} - -Details of the number of call sites in the Condor code for each Old {quote:ClassAds} method, and where it's called from. +Details of the number of call sites in the HTCondor code for each Old {quote:ClassAds} method, and where it's called from. *: The wiki code for the individual calls is available in /p/condor/workspaces/nleroy/OldClassAdWiki -- the summary and detail files above are in there, as well as the code for each of the above, each in it's own file. @@ -16,12 +16,12 @@ {subsection: Additional conversion info} {subsubsection: Compatibility Class} -To ease the transition to new {quote:ClassAds}, we will create compatibility methods that mimic the interface of old {quote:ClassAds}. We will put these methods in a child class to new {quote:ClassAds} called {quote:CompatClassAd}. This child class will be part of the Condor C++ utility library. This leaves the new {quote:ClassAds} library completely independent of other Condor code. +To ease the transition to new {quote:ClassAds}, we will create compatibility methods that mimic the interface of old {quote:ClassAds}. We will put these methods in a child class to new {quote:ClassAds} called {quote:CompatClassAd}. This child class will be part of the HTCondor C++ utility library. This leaves the new {quote:ClassAds} library completely independent of other HTCondor code. Methods with more than a dozen or so callsites will be emulated in {quote:CompatClassAd} when feasible. Some methods, particularly those dealing with {quote:ExprTrees}, cannot be emulated easily, and the callsites will have to be modified. Once the initial transition is complete, we can update callsites at our leisure, with a large dose of student work, until {quote:CompatClassAd} is no longer needed. {subsubsection: ClassAd Functions} -There are some {quote:ClassAd} functions that exist in old {quote:ClassAds} but not new {quote:ClassAds}. These are ones based on Condor's {quote:StringList} class and provide a poor man's list functionality in old {quote:ClassAds}, by allowing a single string to be interpreted as a comma-separated list of items. We should support these functions in new {quote:ClassAds}. +There are some {quote:ClassAd} functions that exist in old {quote:ClassAds} but not new {quote:ClassAds}. These are ones based on HTCondor's {quote:StringList} class and provide a poor man's list functionality in old {quote:ClassAds}, by allowing a single string to be interpreted as a comma-separated list of items. We should support these functions in new {quote:ClassAds}. {subsubsection: Direct use of ExprTree} Many parts of the code do the following to evaluate an expression in the context of a {quote:ClassAd}: @@ -37,7 +37,7 @@ This work can probably be done mostly by a student. We can also write compatibility versions of Parse() and EvalTree(). -In new {quote:ClassAds}, there is no assignment operator inside an {quote:ExprTree}. A {quote:ClassAd} contains a list of attribute name and {quote:ExprTree} pairs. Any code in Condor that's directly inserting or extracting {quote:ExprTree}'s from a {quote:ClassAd} will need to be updated. +In new {quote:ClassAds}, there is no assignment operator inside an {quote:ExprTree}. A {quote:ClassAd} contains a list of attribute name and {quote:ExprTree} pairs. Any code in HTCondor that's directly inserting or extracting {quote:ExprTree}'s from a {quote:ClassAd} will need to be updated. One way to do this update in stages is to add new functions to old {quote:ClassAds} that hide the assignment operator. They would operate on the attribute name as a string and the attribute value as an {quote:ExprTree}. The internal structures could remain the same. Then, the users of the old functions could be be switched over to use the new ones. The new {quote:ClassAds} compatibility class would implement the new functions.