{section: New ClassAd Conversion TimeLine} {subsection: Benchmarks} See ticket #227 for details on this work. 1: A benchmark that instantiates N classads, adds A attributes into it, and then deletes them. Compare execution time and size b/w new and old classads. *:: _Nick_ *DONE* 2: A benchmark that instantiates N classads, then does a constraint evaluation on all of them. Compare execution time and size b/w new and old classads. *:: _Nick_ *DONE* 3: Grab the output of condor_status -l off one of the collectors (?) on a pool to get all the machine classads in the pool into a text file. Suck this up into a program which instantiates a classad for each of these machines. (Maybe make 10 instances of classads for each machine to magnify results). Check memory footprint; compare b/w new and old classads. *:: _Nick_ *Done* 4: Similarly with a job queue, grab the job classads, and suck them into a program which instantiates classads for each job in the text file. (Magnify as needed). Check memory footprint; compare b/w new and old classads. *:: _Nick_ *Done* {subsection: Analyze data, determine whether to procede or not} *: Monday, June 1, 2009 {subsection: Conversion} {wiki:ClassAdConversionTimeDetailedEstimates Detailed time estimates for individual {quote:ClassAd} methods} are also available. {wiki:ClassAdConversionTodo The ClassAd conversion TODO} has more details on these individual blocks. {subsubsection: Pre-Flag Day Tasks} *: Compatibility functions block 1: *:: ClassAd::Assign() *DONE* *:: ClassAd::LookupString(MyString) *DONE* *:: ClassAd::Insert(const char*) *DONE* *:: ClassAd::put() *:: ClassAd::initFromStream() *:: ClassAd::AssignExpr() *DONE* *:: ClassAd::clear() *DONE* *:: ClassAd::EvalString(const char*, const class AttrList*, char**) *:: ClassAd::EvalString(const char*, const class AttrList*, MyString&) *:: ClassAd::NextNameOriginal() *DONE* *:: ClassAd::ResetName() *DONE* *:: ClassAd::sPrintExpr() *:: ClassAd::NextDirtyExpr() *:: ClassAd::SetDirtyFlag() *:: ClassAd::GetDirtyFlag() *:: ClassAd::GetReferences() *:: ClassAd::ChainCollapse() *:: ClassAd::EscapeStringValue() *:: ClassAd::CopyAttribute() *:: ClassAd::fPrintAsXML() *:: ClassAd::sPrintAsXML() *:: ClassAd::IsValidAttrValue() *: Write helper functions for these methods which we can't emulate transparently: *:: ExprTree::PrintToNewStr() *DONE* *:: ExprTree::PrintToStr() *DONE* *:: ExprTree::EvalTree() *: Add {quote:ClassAds} functions that are in old {quote:ClassAds} but not in new {quote:ClassAds}: *:: stringListSize() *:: stringListSum() *:: stringListAve() *:: stringListMin() *:: stringListMax() *:: stringListMember() *:: stringListIMember() *:: stringListRegexpMember() {subsection: Flag Day Tasks} *: Change most or all references to {quote:ClassAd} and {quote:AttrList} with {quote:CompatClassAd}. *: Swap in Varghese's new {quote:ClassAdList} class. *: Fix up the one or two callsites in matchmaker.cpp that move an ad from one {quote:ClassAdList} to another. *: The following methods will need some fixing at the callsites: *:: ClassAd::Insert(ExprTree*) *:: ClassAd::Lookup() *:: ExprTree::RArg() *:: ExprTree::LArg() *:: ExprTree::PrintToNewStr() *:: ExprTree::EvalTree() *:: ClassAd::NextExpr() *:: ClassAd(char*,char) *:: ExprTree::PrintToStr() *:: ExprTree::DeepCopy() *:: ExprTree::MyType() *:: ClassAd::ExchangeExpressions() *DONE* *:: ClassAd::unchain() *DONE* *:: ClassAd::RestoreChain() *DONE* *:: AttrList::put() {subsection: Post-Flag Day Tasks} *: As time permits, rewrite callsites to make {quote:CompatClassAd} unnecessary. The modified callsites can either use native new {quote:ClassAd} methods or newly-written free-standing functions. *:: Replace all usage of attribute {quote:CurrentTime} with {quote:ClassAd} function time(). This can start before the flag day.