[vwnc] [Ann] Port of GOODS database client on public StORE

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

[vwnc] [Ann] Port of GOODS database client on public StORE

cdavidshaffer
I just published a pre-alpha version of a GOODS client for VisualWorks
(works in 7.5 and 7.6) in the public store repo.  All tests pass but
that's all I can say at the moment.  Here's the package comment:

---------------------
A GOODS client for VisualWorks: http://www.garret.ru/~knizhnik/goods.html

This is a port of Avi Bryant's GOODS client for Squeak:

http://wiki.squeak.org/squeak/3492
---------------------

I use GOODS extensively under Squeak.  It's no Gemstone but it is a
solid OODB which, with some TLC, can peform reasonable for many
applications.  I started this port when I thought I had a client who
could use it.  That job never came through so at the moment I don't have
many particular plans for future work on this port.  I use the Squeak
version heavily and hope to port any improvements in that client to this
new one.  The ToDo list includes:

1) more substantial testing
2) core performance improvements: right now the squeak version is twice
as fast on the test suite probably due to my naive socket code.  I'd
love some feedback on this.  Profiles attached.
3) Use of immutability support for a write barrier: looks like the
WriteBarriers package might be of use here but IDK
4) Consider support for cross-smalltalk database (I'm using fully
qualified class names in VW.  In addition, object structure differences
in the core classes mean your databases will not be portable).

David


25 samples, 287.03 average ms/sample, 22 scavenges, 0 incGCs,
0.47s active, 6.67s other processes,
7.18s real time, 0.04s profiling overhead

** Tree **
100.0 BlockClosure [] in Refactory.Browser.SUnitStatusBar>>profileTests
  100.0 Refactory.Browser.SUnitStatusBar>>runTests
    87.3 BlockClosure>>ifCurtailed:
      87.3 [] in Refactory.Browser.SUnitStatusBar>>runTests
        87.3 TestSuite>>run
          87.3 BlockClosure>>sunitEnsure:
            87.3 BlockClosure>>ensure:
              87.3 [] in TestSuite>>run
                87.3 TestSuite>>run:
                  87.3 OrderedCollection>>do:
                    87.3 [] in TestSuite>>run:
                      57.1 TestCase>>run:
                        57.1 TestResult>>runCase:
                          57.1 BlockClosure>>sunitOn:do:
                            57.1 BlockClosure>>on:do:
                              57.1 [] in TestResult>>runCase:
                                57.1 BlockClosure>>sunitOn:do:
                                  57.1 BlockClosure>>on:do:
                                    57.1 [] in [] in TestResult>>runCase:
                                      57.1 TestCase>>runCase
                                        57.1 BlockClosure>>sunitEnsure:
                                          57.1 BlockClosure>>ensure:
                                            57.1 [] in TestCase>>runCase
                                              28.7 GOODS.KKDBTest>>setUp
                                                15.4 GOODS.KKConnection class>>hostname:port:
                                                  15.4 GOODS.KKConnection class>>hostname:port:loginName:
                                                    15.4 SocketAccessor class>>newTCPclientToHost:port:
                                                      15.4 BlockClosure>>ifCurtailed:
                                                        15.4 [] in SocketAccessor class>>newTCPclientToHost:port:
                                                          9.4 SocketAccessor>>connectTo:
                                                            9.4 SocketAccessor>>connectTo:timeout:
                                                              9.4 BlockClosure>>on:do:
                                                                9.4 [] in SocketAccessor>>connectTo:timeout:
                                                                  9.4 SocketAccessor>>primConnectTo:
                                                                    9.4 SocketAccessor>>TimeProfilerCore_primConnectTo:
                                                                      9.4 OSErrorHolder>>reportError
                                                                        9.4 OSErrorHolder class>>reportOn:
                                                                          9.4 Signal>>raiseRequestWith:errorString:
                                                                            9.4 GenericException>>raiseSignal
                                                                              9.4 GenericException>>propagate
                                                                                9.4 GenericException>>propagateFrom:
                                                                                  9.4 GenericException>>propagatePrivateFrom:
                                                                                    9.4 GenericException>>performHandler:
                                                                                      9.4 BlockClosure>>cull:
                                                                                        9.4 [] in SocketAccessor>>connectTo:timeout:
                                                                                          9.4 SocketAccessor>>handleAsyncConnect:timeout:
                                                                                            4.9 DeferredBinding>>value
                                                                                              4.9 DeferredBinding>>resolveBinding
                                                                                                4.9 Behavior>>bindingFor:
                                                                                                  4.9 Class>>bindingFor:modifiers:
                                                                                                    4.9 Class>>protectedBindingFor:modifiers:
                                                                                            4.6 SocketAccessor>>setSem:forWrite:
                                                          6.0 IPSocketAddress class>>hostName:port:
                                                            4.9 SocketAddress class>>new
                                                              4.9 IPSocketAddress class>>new:
                                                                4.9 SocketAddress>>domainCode:
                                                                  4.9 SocketAddress>>canonicalize
                                                                    4.9 SocketAddress class>>canonicalize:
                                                                      4.9 SocketAddress class>>knownClassFromCode:
                                                                        4.9 GeneralBindingReference>>value
                                                                          4.9 GeneralBindingReference>>binding
                                                                            4.9 GeneralBindingReference>>bindingOrNil
                                                                              4.9 GeneralBindingReference>>bindingOrNilWithProtection:
                                                                                4.9 GeneralBindingReference>>resolveWithProtection:orDo:
                                                                                  4.9 [] in GeneralBindingReference>>bindingOrNilWithProtection:
                                                                                    4.9 GeneralBindingReference>>search:starting:withProtection:do:
                                                                                      4.9 GeneralNameSpace>>bindingFor:
                                                                                        4.9 GeneralNameSpace>>bindingFor:modifiers:
                                                                                          4.9 NameSpaceSearchRules>>forNames:do:
                                                                                            4.9 BlockClosure>>ensure:
                                                                                              4.9 [] in GeneralNameSpace>>bindingFor:modifiers:
                                                                                                4.9 GeneralNameSpaceImport>>bindingFor:modifiers:
                                                                                                  4.9 GeneralNameSpace>>protectedBindingFor:modifiers:
                                                                                                    4.9 NameSpaceBindings>>lookup:
                                                8.3 GOODS.KKDatabase>>commit
                                                  8.3 GOODS.KKDatabase>>commitOnFailure:
                                                    8.3 GOODS.KKKeyCache>>commit
                                                      8.3 GOODS.KKRecordCache>>commitObjects:
                                                        8.3 GOODS.KKClassCache>>cacheClassesDuring:
                                                          8.3 BlockClosure>>ensure:
                                                            8.3 [] in GOODS.KKRecordCache>>commitObjects:
                                                              7.8 GOODS.KKRecordCache>>addDirtyObjects:toRecords:andCleanObjectsTo:
                                                                7.8 Dictionary>>keysAndValuesDo:
                                                                  7.8 [] in GOODS.KKRecordCache>>addDirtyObjects:toRecords:andCleanObjectsTo:
                                                                    7.8 GOODS.KKRecordCache>>updateRecordForObject:
                                                                      7.8 GOODS.KKClassCache>>classForObject:
                                                                        7.8 Object>>ifNil:ifNotNil:
                                                                          7.8 BlockClosure>>cull:
                                                                            7.8 [] in GOODS.KKClassCache>>classForObject:
                                                                              7.8 Dictionary>>at:ifAbsentPut:
                                                                                7.8 Dictionary>>at:ifAbsent:
                                                                                  7.8 [] in Dictionary>>at:ifAbsentPut:
                                                                                    7.8 [] in [] in GOODS.KKClassCache>>classForObject:
                                                                                      7.8 GOODS.KKClassCache>>findClassForObject:
                                                                                        7.8 UndefinedObject>>ifNil:
                                                                                          7.8 [] in GOODS.KKClassCache>>findClassForObject:
                                                                                            7.8 GOODS.KKClassCache>>storeDescriptor:
                                                                                              7.8 GOODS.KKConnection>>putClass:
                                                                                                7.8 GOODS.KKClassRecord class>>fromDescriptor:
                                                                                                  7.8 GOODS.KKClassRecord>>initializeFromDescriptor:
                                                                                                    7.8 OrderedCollection>>withIndexCollect:
                                                                                                      7.8 OrderedCollection>>addLast:
                                                4.9 GOODS.KKDatabase class>>connection:
                                                  4.9 GOODS.KKDatabase>>initializeWithConnection:
                                                    4.9 GOODS.KKCache class>>database:
                                                      4.9 GOODS.KKCache>>initializeWithDatabase:
                                                        4.9 GOODS.KKKeyCache>>initialize
                                                          4.9 DeferredBinding>>value
                                                            4.9 DeferredBinding>>resolveBinding
                                                              4.9 GeneralNameSpace>>bindingFor:
                                                                4.9 GeneralNameSpace>>bindingFor:modifiers:
                                                                  4.9 NameSpaceSearchRules>>forNames:do:
                                                                    4.9 BlockClosure>>ensure:
                                                                      4.9 [] in GeneralNameSpace>>bindingFor:modifiers:
                                                                        4.9 GeneralNameSpaceImport>>bindingFor:modifiers:
                                                                          4.9 GeneralNameSpace>>protectedBindingFor:modifiers:
                                                                            4.9 NameSpaceSearchRules>>forNames:do:
                                                                              4.9 BlockClosure>>ensure:
                                                                                4.9 [] in GeneralNameSpace>>protectedBindingFor:modifiers:
                                                                                  4.9 NameSpaceImport>>protectedBindingFor:modifiers:
                                                                                    4.9 GeneralNameSpaceImport>>bindingFor:modifiers:
                                                                                      4.9 GeneralNameSpace>>protectedBindingFor:modifiers:
                                                                                        4.9 VariableBinding>>isPrivate
                                              28.4 TestCase>>performTest
                                                7.3 GOODS.KKDBTest>>testSpecialObjects
                                                  5.2 GOODS.KKDatabase>>commit
                                                    5.2 GOODS.KKDatabase>>commitOnFailure:
                                                      5.2 GOODS.KKKeyCache>>commit
                                                        5.2 GOODS.KKRecordCache>>commitObjects:
                                                          5.2 GOODS.KKClassCache>>cacheClassesDuring:
                                                            5.2 BlockClosure>>ensure:
                                                              5.2 [] in GOODS.KKRecordCache>>commitObjects:
                                                                5.2 GOODS.KKRecordCache>>addDirtyObjects:toRecords:andCleanObjectsTo:
                                                                  5.2 Dictionary>>keysAndValuesDo:
                                                                    5.2 [] in GOODS.KKRecordCache>>addDirtyObjects:toRecords:andCleanObjectsTo:
                                                                      5.2 GOODS.KKRecordCache>>updateRecordForObject:
                                                                        5.2 GOODS.KKClassDescriptor>>streamForObject:database:
                                                                          5.2 GOODS.KKClassDescriptor>>writeObject:onStream:forDatabase:
                                                                            5.2 GOODS.KKClassDescriptor>>referenceFieldsFirstDo:
                                                                              5.2 OrderedCollection>>do:
                                                                                5.2 [] in GOODS.KKClassDescriptor>>referenceFieldsFirstDo:
                                                                                  5.2 [] in GOODS.KKClassDescriptor>>writeObject:onStream:forDatabase:
                                                                                    5.2 GOODS.KKVariableFieldContainer>>writeObject:onStream:forDatabase:
                                                                                      5.2 GOODS.KKVariableFieldContainer>>writeVariablePartOfObject:onStream:forDatabase:
                                                                                        5.2 GOODS.KKReferenceField>>writeField:onStream:forDatabase:
                                                                                          5.2 GOODS.KKReferenceField>>keyForReference:database:
                                                                                            5.2 GOODS.KKDatabase>>keyForObject:
                                                                                              5.2 IdentityDictionary>>at:ifAbsent:
                                                                                                5.2 [] in GOODS.KKDatabase>>keyForObject:
                                                                                                  5.2 GOODS.KKKeyCache>>keyForObject:
                                                                                                    5.2 WeakDictionary>>at:ifAbsent:
                                                                                                      5.2 RecursionLock>>critical:
                                                                                                        5.2 Semaphore>>critical:
                                                                                                          5.2 BlockClosure>>ensure:
                                                                                                            5.2 [] in RecursionLock>>critical:
                                                                                                              5.2 BlockClosure>>ensure:
                                                                                                                5.2 [] in WeakDictionary>>at:ifAbsent:
                                                                                                                  5.2 [] in GOODS.KKKeyCache>>keyForObject:
                                                                                                                    5.2 GOODS.KKRecordCache>>allocateObject:
                                                                                                                      5.2 GOODS.KKClassCache>>classForObject:
                                                                                                                        5.2 Object>>ifNil:ifNotNil:
                                                                                                                          5.2 BlockClosure>>cull:
                                                                                                                            5.2 [] in GOODS.KKClassCache>>classForObject:
                                                                                                                              5.2 Dictionary>>at:ifAbsentPut:
                                                                                                                                5.2 Dictionary>>at:ifAbsent:
                                                                                                                                  5.2 [] in Dictionary>>at:ifAbsentPut:
                                                                                                                                    5.2 [] in [] in GOODS.KKClassCache>>classForObject:
                                                                                                                                      5.2 GOODS.KKClassCache>>findClassForObject:
                                                                                                                                        5.2 UndefinedObject>>ifNil:
                                                                                                                                          5.2 [] in GOODS.KKClassCache>>findClassForObject:
                                                                                                                                            5.2 GOODS.KKClassCache>>storeDescriptor:
                                                                                                                                              5.2 GOODS.KKConnection>>putClass:
                                                                                                                                                5.2 GOODS.KKConnection>>receiveClassID
                                                                                                                                                  5.2 GOODS.KKConnection>>receiveHeader
                                                                                                                                                    5.2 GOODS.KKConnection>>receiveIntoHeaderBuffer
                                                                                                                                                      5.2 GOODS.KKConnection>>receiveFullyInto:
                                                                                                                                                        5.2 IOAccessor>>readInto:startingAt:for:
                                                                                                                                                          5.2 SocketAccessor>>primReadInto:startingAt:for:
                                                                                                                                                            5.2 BlockClosure>>on:do:
                                                                                                                                                              5.2 [] in SocketAccessor>>primReadInto:startingAt:for:
                                                                                                                                                                5.2 SocketAccessor>>privateReadInto:startingAt:for:
                                                                                                                                                                  5.2 SocketAccessor>>TimeProfilerCore_privateReadInto:startingAt:for:
                                                                                                                                                                    5.2 IOAccessor>>readWaitWithTimeoutMs:
                                                                                                                                                                      5.2 SocketAccessor>>setSem:forWrite:
                                                  2.0 Dictionary>>at:
                                                    2.0 Dictionary>>at:ifAbsent:
                                                      2.0 Dictionary>>findKeyOrNil:
                                                        2.0 GOODS.KKObjectProxy>>doesNotUnderstand:
                                                          2.0 GOODS.KKObjectProxy>>xxxObject
                                                            2.0 UndefinedObject>>ifNil:
                                                              2.0 [] in GOODS.KKObjectProxy>>xxxObject
                                                                2.0 GOODS.KKDatabase>>at:
                                                                  2.0 GOODS.KKKeyCache>>at:
                                                                    2.0 GOODS.KKKeyCache>>at:ifAbsent:
                                                                      2.0 Dictionary>>at:ifAbsent:
                                                                        2.0 [] in GOODS.KKKeyCache>>at:
                                                                          2.0 GOODS.KKKeyCache>>loadObjectAt:
                                                                            2.0 GOODS.KKRecordCache>>loadObjectsStartingAt:do:ifAbsent:
                                                                              2.0 OrderedCollection>>reverseDo:
                                                                                2.0 [] in GOODS.KKRecordCache>>loadObjectsStartingAt:do:ifAbsent:
                                                                                  2.0 GOODS.KKRecordCache>>loadObjectRecord:
                                                                                    2.0 GOODS.KKClassCache>>at:
                                                                                      2.0 Dictionary>>at:ifAbsent:
                                                                                        2.0 [] in GOODS.KKClassCache>>at:
                                                                                          2.0 GOODS.KKClassCache>>loadDescriptorAt:
                                                                                            2.0 GOODS.KKConnection>>classAt:
                                                                                              2.0 GOODS.KKConnection>>sendCommand:withShort:
                                                                                                2.0 GOODS.KKConnection>>sendCommand:withByte:withShort:withLong:withLong:
                                                                                                  2.0 IOAccessor>>writeAll:
                                                                                                    2.0 IOAccessor>>writeFrom:startingAt:forSure:
                                                                                                      2.0 SocketAccessor>>primWriteFrom:startingAt:for:
                                                                                                        2.0 BlockClosure>>on:do:
                                                                                                          2.0 [] in SocketAccessor>>primWriteFrom:startingAt:for:
                                                                                                            2.0 SocketAccessor>>privateWriteFrom:startingAt:for:
                                                                                                              2.0 SocketAccessor>>TimeProfilerCore_privateWriteFrom:startingAt:for:
                                                5.3 GOODS.KKDBTest>>testRefreshRoot
                                                  5.3 GOODS.KKDatabase>>commit
                                                    5.3 GOODS.KKDatabase>>commitOnFailure:
                                                      5.3 GOODS.KKKeyCache>>commit
                                                        5.3 GOODS.KKRecordCache>>commitObjects:
                                                          5.3 GOODS.KKClassCache>>cacheClassesDuring:
                                                            5.3 BlockClosure>>ensure:
                                                              5.3 [] in GOODS.KKRecordCache>>commitObjects:
                                                                5.3 GOODS.KKAllocationCache>>reloadCache
                                                                  5.3 GOODS.KKConnection>>bulkAllocateSizes:classes:reserve:
                                                                    5.3 GOODS.KKConnection>>receiveObjectIDs
                                                                      5.3 GOODS.KKConnection>>receiveHeader
                                                                        5.3 GOODS.KKConnection>>receiveIntoHeaderBuffer
                                                                          5.3 GOODS.KKConnection>>receiveFullyInto:
                                                                            5.3 IOAccessor>>readInto:startingAt:for:
                                                                              5.3 SocketAccessor>>primReadInto:startingAt:for:
                                                                                5.3 BlockClosure>>on:do:
                                                                                  5.3 [] in SocketAccessor>>primReadInto:startingAt:for:
                                                                                    5.3 SocketAccessor>>privateReadInto:startingAt:for:
                                                                                      5.3 SocketAccessor>>TimeProfilerCore_privateReadInto:startingAt:for:
                                                                                        5.3 IOAccessor>>readWaitWithTimeoutMs:
                                                                                          5.3 SocketAccessor>>setSem:forWrite:
                                                4.6 GOODS.KKDBTest>>testTransactions
                                                  4.6 GOODS.KKDatabase>>commit
                                                    4.6 GOODS.KKDatabase>>commitOnFailure:
                                                      4.6 True>>ifTrue:ifFalse:
                                                        4.6 [] in GOODS.KKDatabase>>commitOnFailure:
                                                          4.6 GOODS.KKDatabase>>refresh
                                                            4.6 GOODS.KKKeyCache>>refresh
                                                              4.6 GOODS.KKKeyCache>>checkForNewInvalids
                                                                4.6 GOODS.KKConnection>>checkForNewInvalids
                                                                  4.6 GOODS.KKConnection>>dataAvailable
                                                                    4.6 SocketAccessor>>dataAvailable
                                                                      4.6 IOAccessor>>readWaitWithTimeoutMs:
                                                                        4.6 SocketAccessor>>setSem:forWrite:
                                                4.4 GOODS.KKDBTest>>testConflict
                                                  4.4 GOODS.KKDatabase>>commit
                                                    4.4 GOODS.KKDatabase>>commitOnFailure:
                                                      4.4 GOODS.KKKeyCache>>commit
                                                        4.4 GOODS.KKRecordCache>>commitObjects:
                                                          4.4 GOODS.KKClassCache>>cacheClassesDuring:
                                                            4.4 BlockClosure>>ensure:
                                                              4.4 [] in GOODS.KKRecordCache>>commitObjects:
                                                                4.4 GOODS.KKRecordCache>>addDirtyObjects:toRecords:andCleanObjectsTo:
                                                                  4.4 Dictionary>>keysAndValuesDo:
                                                                    4.4 [] in GOODS.KKRecordCache>>addDirtyObjects:toRecords:andCleanObjectsTo:
                                                                      4.4 GOODS.KKRecordCache>>updateRecordForObject:
                                                                        4.4 GOODS.KKClassCache>>classForObject:
                                                                          4.4 Object>>ifNil:ifNotNil:
                                                                            4.4 BlockClosure>>cull:
                                                                              4.4 [] in GOODS.KKClassCache>>classForObject:
                                                                                4.4 Dictionary>>at:ifAbsentPut:
                                                                                  4.4 Dictionary>>at:ifAbsent:
                                                                                    4.4 [] in Dictionary>>at:ifAbsentPut:
                                                                                      4.4 [] in [] in GOODS.KKClassCache>>classForObject:
                                                                                        4.4 GOODS.KKClassCache>>findClassForObject:
                                                                                          4.4 UndefinedObject>>ifNil:
                                                                                            4.4 [] in GOODS.KKClassCache>>findClassForObject:
                                                                                              4.4 GOODS.KKClassCache>>storeDescriptor:
                                                                                                4.4 GOODS.KKConnection>>putClass:
                                                                                                  4.4 GOODS.KKConnection>>receiveClassID
                                                                                                    4.4 GOODS.KKConnection>>receiveHeader
                                                                                                      4.4 GOODS.KKConnection>>receiveIntoHeaderBuffer
                                                                                                        4.4 GOODS.KKConnection>>receiveFullyInto:
                                                                                                          4.4 IOAccessor>>readInto:startingAt:for:
                                                                                                            4.4 SocketAccessor>>primReadInto:startingAt:for:
                                                                                                              4.4 BlockClosure>>on:do:
                                                                                                                4.4 [] in SocketAccessor>>primReadInto:startingAt:for:
                                                                                                                  4.4 SocketAccessor>>privateReadInto:startingAt:for:
                                                                                                                    4.4 SocketAccessor>>TimeProfilerCore_privateReadInto:startingAt:for:
                                                                                                                      4.4 IOAccessor>>readWaitWithTimeoutMs:
                                                                                                                        4.4 SocketAccessor>>setSem:forWrite:
                                                3.7 GOODS.KKDBTest>>testClasses
                                                  3.7 GOODS.KKDatabase>>commit
                                                    3.7 GOODS.KKDatabase>>commitOnFailure:
                                                      3.7 GOODS.KKKeyCache>>commit
                                                        3.7 GOODS.KKRecordCache>>commitObjects:
                                                          3.7 GOODS.KKClassCache>>cacheClassesDuring:
                                                            3.7 BlockClosure>>ensure:
                                                              3.7 [] in GOODS.KKRecordCache>>commitObjects:
                                                                3.7 GOODS.KKAllocationCache>>reloadCache
                                                                  3.7 GOODS.KKConnection>>bulkAllocateSizes:classes:reserve:
                                                                    3.7 GOODS.KKConnection>>receiveObjectIDs
                                                                      3.7 GOODS.KKConnection>>receiveHeader
                                                                        3.7 GOODS.KKConnection>>receiveIntoHeaderBuffer
                                                                          3.7 GOODS.KKConnection>>receiveFullyInto:
                                                                            3.7 IOAccessor>>readInto:startingAt:for:
                                                                              3.7 SocketAccessor>>primReadInto:startingAt:for:
                                                                                3.7 BlockClosure>>on:do:
                                                                                  3.7 [] in SocketAccessor>>primReadInto:startingAt:for:
                                                                                    3.7 SocketAccessor>>privateReadInto:startingAt:for:
                                                                                      3.7 SocketAccessor>>TimeProfilerCore_privateReadInto:startingAt:for:
                                                                                        3.7 IOAccessor>>readWaitWithTimeoutMs:
                                                                                          3.7 SocketAccessor>>setSem:forWrite:
                                                3.2 GOODS.KKDBTest>>testCommitWithRetry
                                                  3.2 GOODS.KKDatabase>>commit
                                                    3.2 GOODS.KKDatabase>>commitOnFailure:
                                                      3.2 GOODS.KKKeyCache>>commit
                                                        3.2 GOODS.KKRecordCache>>commitObjects:
                                                          3.2 GOODS.KKClassCache>>cacheClassesDuring:
                                                            3.2 BlockClosure>>ensure:
                                                              3.2 [] in GOODS.KKRecordCache>>commitObjects:
                                                                3.2 GOODS.KKConnection>>commitRecords:andValidate:
                                                                  3.2 GOODS.KKConnection>>receiveTransactionResult
                                                                    3.2 GOODS.KKConnection>>receiveHeader
                                                                      3.2 GOODS.KKConnection>>receiveIntoHeaderBuffer
                                                                        3.2 GOODS.KKConnection>>receiveFullyInto:
                                                                          3.2 IOAccessor>>readInto:startingAt:for:
                                                                            3.2 SocketAccessor>>primReadInto:startingAt:for:
                                                                              3.2 BlockClosure>>on:do:
                                                                                3.2 [] in SocketAccessor>>primReadInto:startingAt:for:
                                                                                  3.2 SocketAccessor>>privateReadInto:startingAt:for:
                                                                                    3.2 SocketAccessor>>TimeProfilerCore_privateReadInto:startingAt:for:
                                                                                      3.2 IOAccessor>>readWaitWithTimeoutMs:
                                                                                        3.2 SocketAccessor>>setSem:forWrite:
                      30.2 Object>>sunitChanged:
                        30.2 Object>>changed:
                          30.2 Object>>changed:with:
                            30.2 Refactory.Browser.SUnitStatusBar>>update:with:from:
                              30.2 Refactory.Browser.SUnitStatusBar>>setTestLabel:
                                27.0 VisualPart>>repairDamage
                                  27.0 Object>>ifNotNil:
                                    27.0 BlockClosure>>cull:
                                      27.0 [] in VisualPart>>repairDamage
                                        27.0 Window>>displayPendingInvalidation
                                          27.0 ScheduledWindow>>displayDamageEvent:
                                            27.0 WindowDisplayPolicy>>displayDamageList:in:
                                              27.0 CompositePart>>displayOn:
                                                27.0 BoundedWrapper>>displayOn:
                                                  27.0 CompositePart>>displayOn:
                                                    27.0 WidgetWrapper>>displayOn:
                                                      27.0 Wrapper>>displayOn:
                                                        27.0 BoundedWrapper>>displayOn:
                                                          27.0 WidgetStateWrapper>>displayOn:
                                                            27.0 Wrapper>>displayOn:
                                                              27.0 CompositePart>>displayOn:
                                                                27.0 WidgetWrapper>>displayOn:
                                                                  27.0 Wrapper>>displayOn:
                                                                    27.0 BoundedWrapper>>displayOn:
                                                                      27.0 Panel>>displayOn:
                                                                        27.0 Panel>>subpartsDo:
                                                                          27.0 OrderedCollection>>do:
                                                                            27.0 [] in Panel>>subpartsDo:
                                                                              27.0 [] in Panel>>displayOn:
                                                                                27.0 Panel>>displayPart:on:
                                                                                  27.0 BlockClosure>>ensure:
                                                                                    27.0 [] in Panel>>displayPart:on:
                                                                                      27.0 Panel>>displayOn:
                                                                                        27.0 Panel>>subpartsDo:
                                                                                          27.0 OrderedCollection>>do:
                                                                                            27.0 [] in Panel>>subpartsDo:
                                                                                              27.0 [] in Panel>>displayOn:
                                                                                                27.0 Panel>>displayPart:on:
                                                                                                  27.0 BlockClosure>>ensure:
                                                                                                    27.0 [] in Panel>>displayPart:on:
                                                                                                      27.0 Refactory.Browser.SUnitStatusBar>>displayOn:
                                                                                                        27.0 Refactory.Browser.SUnitStatusBar>>canRunTests
                                                                                                          27.0 Refactory.Browser.SUnitStatusBar>>testCasesExist
                                                                                                            27.0 Refactory.Browser.SUnitStatusBar>>pundleTestCasesExist
                                                                                                              27.0 Collection>>anySatisfy:
                                                                                                                27.0 OrderedCollection>>do:
                                                                                                                  27.0 [] in Collection>>anySatisfy:
                                                                                                                    27.0 [] in Refactory.Browser.SUnitStatusBar>>pundleTestCasesExist
                                                                                                                      14.2 Store.BundleModel>>definedClasses
                                                                                                                        14.2 OrderedCollection>>do:
                                                                                                                          14.2 [] in Store.BundleModel>>definedClasses
                                                                                                                            14.2 Store.PackageModel>>definedClasses
                                                                                                                              8.0 OrderedCollection>>collect:
                                                                                                                                8.0 OrderedCollection>>do:
                                                                                                                                  8.0 [] in OrderedCollection>>collect:
                                                                                                                                    8.0 [] in Store.PackageModel>>definedClasses
                                                                                                                                      8.0 Store.ClassDescriptor>>actual
                                                                                                                                        8.0 CharacterArray>>asStrictReference
                                                                                                                                          8.0 GeneralBindingReference class>>pathString:
                                                                                                                                            4.5 OrderedCollection>>collect:
                                                                                                                                              4.5 OrderedCollection>>do:
                                                                                                                                                4.5 [] in OrderedCollection>>collect:
                                                                                                                                            3.5 GeneralBindingReference class>>path:
                                                                                                                                              3.5 OrderedCollection>>collect:
                                                                                                                                                3.5 OrderedCollection>>do:
                                                                                                                                                  3.5 [] in OrderedCollection>>collect:
                                                                                                                                                    3.5 [] in GeneralBindingReference class>>path:
                                                                                                                                                      3.5 SystemUtils class>>validateName:
                                                                                                                                                        3.5 Scanner class>>new
                                                                                                                                                          3.5 Parser>>initScanner
                                                                                                                              6.2 Store.PackageModel>>classesDefinedInPackage
                                                                                                                                6.2 Store.PackageModel>>definedClassModels
                                                                                                                                  6.2 Collection>>asOrderedCollection
                                                                                                                                    6.2 OrderedCollection>>do:
                                                                                                                      12.9 Refactory.Browser.SUnitStatusBar>>testCasesExistInAny:
                                                                                                                        12.9 Collection>>anySatisfy:
                                                                                                                          12.9 OrderedCollection>>do:
                                                                                                                            12.9 [] in Collection>>anySatisfy:
                                                                                                                              12.9 [] in Refactory.Browser.SUnitStatusBar>>testCasesExistInAny:
                                                                                                                                12.9 Refactory.Browser.SUnitStatusBar>>testSelectorsForClass:
                                                                                                                                  12.9 TestCase class>>allTestSelectors
                                                                                                                                    12.9 Behavior>>sunitAllSelectors
                                                                                                                                      12.9 Collection>>asSortedCollection
                                                                                                                                        12.9 SortedCollection>>addAll:
                                                                                                                                          12.9 SortedCollection>>reSort
                                                                                                                                            12.9 SortedCollection>>sort:to:
                                                                                                                                              12.9 SortedCollection>>hybridSort:to:with:
                                                                                                                                                12.9 SortedCollection>>hybridSort:to:with:
                                                                                                                                                  12.9 SortedCollection>>hybridSort:to:with:
                                                                                                                                                    6.6 [] in SortedCollection class>>initialize
                                                                                                                                                      6.6 String>><=
                                                                                                                                                        6.6 String>>compare:
                                                                                                                                                          6.6 StringCollationPolicy>>collate:to:
                                                                                                                                                            6.6 StringCollationPolicy>>cCollate:to:
                                                                                                                                                              4.4 Character>>asUppercase
                                                                                                                                                              2.2 primitives
                                                                                                                                                    6.3 SortedCollection>>hybridSort:to:with:
                                                                                                                                                      6.3 SortedCollection>>hybridSort:to:with:
                                                                                                                                                        6.3 [] in SortedCollection class>>initialize
                                                                                                                                                          6.3 String>><=
                                                                                                                                                            6.3 String>>compare:
                                                                                                                                                              6.3 StringCollationPolicy class>>default
                                                                                                                                                                6.3 Locale class>>current
                                3.2 PassiveLabel>>labelString:
                                  3.2 PassiveLabel>>label:
                                    3.2 VisualPart>>changedPreferredBounds:
                                      3.2 VisualPart>>changedPreferredBounds:forComponent:
                                        3.2 Panel>>changedPreferredBounds:forComponent:
                                          3.2 Object>>ifNotNil:
                                            3.2 BlockClosure>>cull:
                                              3.2 [] in Panel>>changedPreferredBounds:forComponent:
                                                3.2 Panel>>changedPreferredBounds:forComponent:
                                                  3.2 Object>>ifNotNil:
                                                    3.2 BlockClosure>>cull:
                                                      3.2 [] in Panel>>changedPreferredBounds:forComponent:
                                                        3.2 Panel>>changedPreferredBounds:forComponent:
                                                          3.2 Panel>>bounds:
                                                            3.2 Panel>>updatePartFrames:
                                                              3.2 [] in Refactory.Browser.CodeModel>>mainView
                                                                3.2 OrderedCollection>>last
    6.4 Refactory.Browser.CodeModel>>navigate
      6.4 Refactory.Browser.BrowserNavigator>>setState:
        6.4 Refactory.Browser.Navigator>>setState:
          6.4 Refactory.Browser.Navigator>>updatePartsWith:
            6.4 OrderedCollection>>do:
              6.4 [] in Refactory.Browser.Navigator>>updatePartsWith:
                6.4 Refactory.Browser.TabNavigatorPart>>selectState:
                  6.4 Refactory.Browser.TabNavigatorPart>>selectStateForComponents:
                    6.4 OrderedCollection>>do:
                      6.4 [] in Refactory.Browser.TabNavigatorPart>>selectStateForComponents:
                        6.4 Refactory.Browser.ClassNavigatorPart>>selectState:
                          6.4 Refactory.Browser.ClassNavigatorPart>>fillInListFor:
                            6.4 Refactory.Browser.ListNavigatorPart>>updateListWith:
                              6.4 Refactory.Browser.ClassNavigatorPart>>list:
                                6.4 Refactory.Browser.ListNavigatorPart>>list:
                                  6.4 SelectionInList>>list:
                                    6.4 ValueModel>>value:
                                      6.4 Object>>changed:
                                        6.4 Object>>changed:with:
                                          6.4 DependentsCollection>>update:with:from:
                                            6.4 Refactory.Browser.RBMultiSelectionInList>>update:with:from:
                                              6.4 Object>>changed:
                                                6.4 Object>>changed:with:
                                                  6.4 DependentsCollection>>update:with:from:
                                                    6.4 SelectionView>>update:with:from:
                                                      6.4 MultiSelectionSequenceView>>updateSelectionChannel:
                                                        6.4 Refactory.Browser.RBMultiSelectionView>>updateSelectionChannel
                                                          6.4 Collection>>notEmpty
    4.1 Refactory.Browser.SUnitStatusBar>>setTestLabel:
      2.9 VisualPart>>repairDamage
        2.9 Object>>ifNotNil:
          2.9 BlockClosure>>cull:
            2.9 [] in VisualPart>>repairDamage
              2.9 Window>>displayPendingInvalidation
                2.9 ScheduledWindow>>displayDamageEvent:
                  2.9 WindowDisplayPolicy>>displayDamageList:in:
                    2.9 DisplaySurface>>graphicsContext
                      2.9 GraphicsContext class>>on:
                        2.9 GraphicsContext>>setMedium:
                          2.9 ScreenGraphicsContext>>initializeForMedium
                            2.9 GraphicsContext>>initializeForMedium
                              2.9 GraphicsContext>>paint:
                                2.9 SymbolicPaint>>installOn:
                                  2.9 ColorValue>>installOn:
                                    2.9 GraphicsContext>>setPaintToColor:
                                      2.9 PaintPolicy>>renderPaint:usingPalette:on:
                                        2.9 NearestPaint>>renderPaint:usingPalette:on:
                                          2.9 FixedPalette>>indexOfPaintNearest:
                                            2.9 ColorValue>>blue
    2.2 Refactory.Browser.SUnitStatusBar>>testCases
      2.2 Refactory.Browser.SUnitStatusBar>>pundleTestCases
        2.2 Collection>>inject:into:
          2.2 OrderedCollection>>do:
            2.2 [] in Collection>>inject:into:
              2.2 [] in Refactory.Browser.SUnitStatusBar>>pundleTestCases
                2.2 Refactory.Browser.SUnitStatusBar>>testCasesFor:
                  2.2 Collection>>inject:into:
                    2.2 OrderedCollection>>do:
                      2.2 [] in Collection>>inject:into:
                        2.2 [] in Refactory.Browser.SUnitStatusBar>>testCasesFor:
                          2.2 Refactory.Browser.SUnitStatusBar>>testSelectorsForClass:
                            2.2 TestCase class>>allTestSelectors
                              2.2 Behavior>>sunitAllSelectors
                                2.2 Collection>>asSortedCollection
                                  2.2 SortedCollection>>addAll:
                                    2.2 SortedCollection>>reSort
                                      2.2 SortedCollection>>sort:to:
                                        2.2 SortedCollection>>hybridSort:to:with:
                                          2.2 SortedCollection>>hybridSort:to:with:
                                            2.2 [] in SortedCollection class>>initialize
                                              2.2 String>><=
                                                2.2 String>>compare:
                                                  2.2 StringCollationPolicy>>collate:to:
                                                    2.2 StringCollationPolicy>>cCollate:to:

** Totals **
30.9 SocketAccessor>>setSem:forWrite:
7.8 OrderedCollection>>addLast:
6.4 Collection>>notEmpty
6.3 Locale class>>current
6.2 OrderedCollection>>do:
4.9 VariableBinding>>isPrivate
4.9 NameSpaceBindings>>lookup:
4.9 Class>>protectedBindingFor:modifiers:
4.5 [] in OrderedCollection>>collect:
4.4 Character>>asUppercase
4.3 StringCollationPolicy>>cCollate:to:
3.5 Parser>>initScanner
3.2 OrderedCollection>>last
2.9 ColorValue>>blue
2.0 SocketAccessor>>TimeProfilerCore_privateWriteFrom:startingAt:for:


 - 4033 tallies, 4097 msec.

**Tree**
97.9% {4011ms} TestRunner>>runAll
  |97.4% {3990ms} TestRunner>>runSuite:
  |  97.3% {3986ms} TestRunner>>runTest:
  |    96.9% {3970ms} KKDBTest(TestCase)>>run:
  |      96.9% {3970ms} TestResult>>runCase:
  |        96.9% {3970ms} KKDBTest(TestCase)>>runCase
  |          56.1% {2298ms} KKDBTest(TestCase)>>performTest
  |            |11.7% {479ms} KKDBTest>>testCommitWithRetry
  |            |  |5.6% {229ms} KKDatabase>>commitWithRetry:
  |            |  |  |3.0% {123ms} KKDatabase>>commitOnFailure:
  |            |  |  |  |3.0% {123ms} KKKeyCache>>commit
  |            |  |  |  |  3.0% {123ms} KKRecordCache>>commitObjects:
  |            |  |  |2.3% {94ms} KKDatabase>>commitWithRetry:
  |            |  |  |  2.3% {94ms} KKDatabase>>commitOnFailure:
  |            |  |  |    2.3% {94ms} KKKeyCache>>commit
  |            |  |  |      2.3% {94ms} KKRecordCache>>commitObjects:
  |            |  |5.4% {221ms} KKDatabase>>commit
  |            |  |  5.4% {221ms} KKDatabase>>commitOnFailure:
  |            |  |    5.4% {221ms} KKKeyCache>>commit
  |            |  |      5.4% {221ms} KKRecordCache>>commitObjects:
  |            |  |        2.2% {90ms} KKConnection>>commitRecords:andValidate:
  |            |  |          |2.2% {90ms} KKConnection>>receiveTransactionResult
  |            |  |          |  2.2% {90ms} KKConnection>>receiveHeader
  |            |  |          |    2.2% {90ms} KKConnection>>receiveIntoHeaderBuffer
  |            |  |          |      2.2% {90ms} KKConnection>>receiveFullyInto:
  |            |  |          |        2.2% {90ms} Socket>>receiveDataInto:startingAt:
  |            |  |          |          2.2% {90ms} Socket>>waitForDataIfClosed:
  |            |  |        2.0% {82ms} KKAllocationCache>>reloadCache
  |            |  |          2.0% {82ms} KKConnection>>bulkAllocateSizes:classes:reserve:
  |            |  |            2.0% {82ms} KKConnection>>receiveObjectIDs
  |            |  |              2.0% {82ms} KKConnection>>receiveHeader
  |            |  |                2.0% {82ms} KKConnection>>receiveIntoHeaderBuffer
  |            |  |                  2.0% {82ms} KKConnection>>receiveFullyInto:
  |            |  |                    2.0% {82ms} Socket>>receiveDataInto:startingAt:
  |            |  |                      2.0% {82ms} Socket>>waitForDataIfClosed:
  |            |6.8% {279ms} KKDBTest>>testTransactions
  |            |  |6.6% {270ms} KKDatabase>>commit
  |            |  |  6.6% {270ms} KKDatabase>>commitOnFailure:
  |            |  |    6.6% {270ms} KKKeyCache>>commit
  |            |  |      6.6% {270ms} KKRecordCache>>commitObjects:
  |            |  |        3.1% {127ms} KKRecordCache>>addNewObjectsToRecords:
  |            |  |          |3.1% {127ms} KKRecordCache>>updateRecordForObject:
  |            |  |          |  3.1% {127ms} KKClassDescriptor>>streamForObject:database:
  |            |  |          |    3.1% {127ms} KKClassDescriptor>>writeObject:onStream:forDatabase:
  |            |  |          |      3.1% {127ms} KKSingleFieldContainer>>writeObject:onStream:forDatabase:
  |            |  |          |        3.1% {127ms} KKReferenceField>>writeField:onStream:forDatabase:
  |            |  |          |          3.1% {127ms} KKReferenceField>>keyForReference:database:
  |            |  |          |            3.1% {127ms} KKDatabase>>keyForObject:
  |            |  |          |              3.1% {127ms} KKKeyCache>>keyForObject:
  |            |  |          |                3.1% {127ms} KKRecordCache>>allocateObject:
  |            |  |          |                  3.1% {127ms} KKClassCache>>classForObject:
  |            |  |          |                    3.1% {127ms} KKClassCache>>findClassForObject:
  |            |  |          |                      3.1% {127ms} KKClassCache>>storeDescriptor:
  |            |  |          |                        3.1% {127ms} KKConnection>>putClass:
  |            |  |          |                          3.0% {123ms} KKConnection>>receiveClassID
  |            |  |          |                            3.0% {123ms} KKConnection>>receiveHeader
  |            |  |          |                              3.0% {123ms} KKConnection>>receiveIntoHeaderBuffer
  |            |  |          |                                3.0% {123ms} KKConnection>>receiveFullyInto:
  |            |  |          |                                  3.0% {123ms} Socket>>receiveDataInto:startingAt:
  |            |  |          |                                    3.0% {123ms} Socket>>waitForDataIfClosed:
  |            |  |        2.2% {90ms} KKConnection>>commitRecords:andValidate:
  |            |  |          2.2% {90ms} KKConnection>>receiveTransactionResult
  |            |  |            2.2% {90ms} KKConnection>>receiveHeader
  |            |  |              2.2% {90ms} KKConnection>>receiveIntoHeaderBuffer
  |            |  |                2.2% {90ms} KKConnection>>receiveFullyInto:
  |            |  |                  2.2% {90ms} Socket>>receiveDataInto:startingAt:
  |            |  |                    2.2% {90ms} Socket>>waitForDataIfClosed:
  |            |6.6% {270ms} KKDBTest>>testIdentitySet
  |            |  |5.4% {221ms} KKDatabase>>commit
  |            |  |  5.4% {221ms} KKDatabase>>commitOnFailure:
  |            |  |    5.4% {221ms} KKKeyCache>>commit
  |            |  |      5.4% {221ms} KKRecordCache>>commitObjects:
  |            |  |        2.1% {86ms} KKRecordCache>>addNewObjectsToRecords:
  |            |  |          2.1% {86ms} KKRecordCache>>updateRecordForObject:
  |            |  |            2.1% {86ms} KKClassDescriptor>>streamForObject:database:
  |            |  |              2.1% {86ms} KKClassDescriptor>>writeObject:onStream:forDatabase:
  |            |  |                2.1% {86ms} KKSingleFieldContainer>>writeObject:onStream:forDatabase:
  |            |  |                  2.1% {86ms} KKReferenceField>>writeField:onStream:forDatabase:
  |            |  |                    2.1% {86ms} KKReferenceField>>keyForReference:database:
  |            |  |                      2.1% {86ms} KKDatabase>>keyForObject:
  |            |  |                        2.1% {86ms} KKKeyCache>>keyForObject:
  |            |  |                          2.1% {86ms} KKRecordCache>>allocateObject:
  |            |  |                            2.1% {86ms} KKClassCache>>classForObject:
  |            |  |                              2.1% {86ms} KKClassCache>>findClassForObject:
  |            |  |                                2.1% {86ms} KKClassCache>>storeDescriptor:
  |            |  |                                  2.1% {86ms} KKConnection>>putClass:
  |            |  |                                    2.1% {86ms} KKConnection>>receiveClassID
  |            |  |                                      2.1% {86ms} KKConnection>>receiveHeader
  |            |  |                                        2.1% {86ms} KKConnection>>receiveIntoHeaderBuffer
  |            |  |                                          2.1% {86ms} KKConnection>>receiveFullyInto:
  |            |  |                                            2.1% {86ms} Socket>>receiveDataInto:startingAt:
  |            |  |                                              2.1% {86ms} Socket>>waitForDataIfClosed:
  |            |5.6% {229ms} KKDBTest>>testConflict
  |            |  |5.5% {225ms} KKDatabase>>commit
  |            |  |  5.5% {225ms} KKDatabase>>commitOnFailure:
  |            |  |    5.5% {225ms} KKKeyCache>>commit
  |            |  |      5.5% {225ms} KKRecordCache>>commitObjects:
  |            |  |        3.1% {127ms} KKConnection>>commitRecords:andValidate:
  |            |  |          3.1% {127ms} KKConnection>>receiveTransactionResult
  |            |  |            3.1% {127ms} KKConnection>>receiveHeader
  |            |  |              3.1% {127ms} KKConnection>>receiveIntoHeaderBuffer
  |            |  |                3.1% {127ms} KKConnection>>receiveFullyInto:
  |            |  |                  3.1% {127ms} Socket>>receiveDataInto:startingAt:
  |            |  |                    3.1% {127ms} Socket>>waitForDataIfClosed:
  |            |5.4% {221ms} KKDBTest>>testRefreshRoot
  |            |  |5.3% {217ms} KKDatabase>>commit
  |            |  |  5.3% {217ms} KKDatabase>>commitOnFailure:
  |            |  |    5.3% {217ms} KKKeyCache>>commit
  |            |  |      5.3% {217ms} KKRecordCache>>commitObjects:
  |            |  |        2.1% {86ms} KKConnection>>commitRecords:andValidate:
  |            |  |          |2.1% {86ms} KKConnection>>receiveTransactionResult
  |            |  |          |  2.1% {86ms} KKConnection>>receiveHeader
  |            |  |          |    2.1% {86ms} KKConnection>>receiveIntoHeaderBuffer
  |            |  |          |      2.1% {86ms} KKConnection>>receiveFullyInto:
  |            |  |          |        2.1% {86ms} Socket>>receiveDataInto:startingAt:
  |            |  |          |          2.1% {86ms} Socket>>waitForDataIfClosed:
  |            |  |        2.1% {86ms} KKAllocationCache>>reloadCache
  |            |  |          2.1% {86ms} KKConnection>>bulkAllocateSizes:classes:reserve:
  |            |  |            2.1% {86ms} KKConnection>>receiveObjectIDs
  |            |4.5% {184ms} KKDBTest>>testClasses
  |            |  |4.3% {176ms} KKDatabase>>commit
  |            |  |  4.3% {176ms} KKDatabase>>commitOnFailure:
  |            |  |    4.3% {176ms} KKKeyCache>>commit
  |            |  |      4.3% {176ms} KKRecordCache>>commitObjects:
  |            |  |        2.1% {86ms} KKRecordCache>>addNewObjectsToRecords:
  |            |  |          2.1% {86ms} KKRecordCache>>updateRecordForObject:
  |            |  |            2.1% {86ms} KKClassDescriptor>>streamForObject:database:
  |            |  |              2.1% {86ms} KKClassDescriptor>>writeObject:onStream:forDatabase:
  |            |  |                2.1% {86ms} KKSingleFieldContainer>>writeObject:onStream:forDatabase:
  |            |  |                  2.1% {86ms} KKReferenceField>>writeField:onStream:forDatabase:
  |            |  |                    2.1% {86ms} KKReferenceField>>keyForReference:database:
  |            |  |                      2.1% {86ms} KKDatabase>>keyForObject:
  |            |  |                        2.1% {86ms} KKKeyCache>>keyForObject:
  |            |  |                          2.1% {86ms} KKRecordCache>>allocateObject:
  |            |  |                            2.1% {86ms} KKClassCache>>classForObject:
  |            |  |                              2.1% {86ms} KKClassCache>>findClassForObject:
  |            |  |                                2.1% {86ms} KKClassCache>>storeDescriptor:
  |            |  |                                  2.1% {86ms} KKConnection>>putClass:
  |            |  |                                    2.1% {86ms} KKConnection>>receiveClassID
  |            |4.2% {172ms} KKDBTest>>testSpecialObjects
  |            |  |4.1% {168ms} KKDatabase>>commit
  |            |  |  4.1% {168ms} KKDatabase>>commitOnFailure:
  |            |  |    4.1% {168ms} KKKeyCache>>commit
  |            |  |      4.1% {168ms} KKRecordCache>>commitObjects:
  |            |3.4% {139ms} KKDBTest>>testCharacters
  |            |  |3.2% {131ms} KKDatabase>>commit
  |            |  |  3.2% {131ms} KKDatabase>>commitOnFailure:
  |            |  |    3.2% {131ms} KKKeyCache>>commit
  |            |  |      3.2% {131ms} KKRecordCache>>commitObjects:
  |            |3.4% {139ms} KKDBTest>>testNumbers
  |            |  |3.2% {131ms} KKDatabase>>commit
  |            |  |  3.2% {131ms} KKDatabase>>commitOnFailure:
  |            |  |    3.2% {131ms} KKKeyCache>>commit
  |            |  |      3.2% {131ms} KKRecordCache>>commitObjects:
  |            |3.3% {135ms} KKDBTest>>testRollbackExistingObject
  |            |  3.3% {135ms} KKDatabase>>commit
  |            |    3.3% {135ms} KKDatabase>>commitOnFailure:
  |            |      3.3% {135ms} KKKeyCache>>commit
  |            |        3.3% {135ms} KKRecordCache>>commitObjects:
  |            |          2.2% {90ms} KKConnection>>commitRecords:andValidate:
  |            |            2.1% {86ms} KKConnection>>receiveTransactionResult
  |            |              2.1% {86ms} KKConnection>>receiveHeader
  |            |                2.1% {86ms} KKConnection>>receiveIntoHeaderBuffer
  |            |                  2.1% {86ms} KKConnection>>receiveFullyInto:
  |            |                    2.1% {86ms} Socket>>receiveDataInto:startingAt:
  |            |                      2.1% {86ms} Socket>>waitForDataIfClosed:
  |          40.9% {1676ms} KKDBTest>>setUp
  |            23.9% {979ms} KKConnection class>>hostname:port:
  |              |23.8% {975ms} KKConnection class>>hostname:port:loginName:
  |              |  21.0% {860ms} Delay>>wait
  |            15.8% {647ms} KKDatabase>>commit
  |              15.8% {647ms} KKDatabase>>commitOnFailure:
  |                15.8% {647ms} KKKeyCache>>commit
  |                  15.8% {647ms} KKRecordCache>>commitObjects:
  |                    12.8% {524ms} KKConnection>>commitRecords:andValidate:
  |                      |12.6% {516ms} KKConnection>>receiveTransactionResult
  |                      |  12.6% {516ms} KKConnection>>receiveHeader
  |                      |    12.6% {516ms} KKConnection>>receiveIntoHeaderBuffer
  |                      |      12.6% {516ms} KKConnection>>receiveFullyInto:
  |                      |        12.6% {516ms} Socket>>receiveDataInto:startingAt:
  |                      |          12.6% {516ms} Socket>>waitForDataIfClosed:
  |                    2.4% {98ms} KKRecordCache>>addDirtyObjects:toRecords:andCleanObjectsTo:
  |                      2.4% {98ms} KKRecordCache>>updateRecordForObject:
  |                        2.4% {98ms} KKClassCache>>classForObject:
  |                          2.4% {98ms} KKClassCache>>findClassForObject:
2.1% {86ms} SystemProgressMorph>>label:min:max:
  2.0% {82ms} PasteUpMorph>>displayWorld
    2.0% {82ms} PasteUpMorph>>privateOuterDisplayWorld
      2.0% {82ms} WorldState>>displayWorld:submorphs:

**Leaves**
70.3% {2880ms} Socket>>waitForDataIfClosed:
21.1% {864ms} Delay>>wait

**Memory**
        old +281,492 bytes
        young -120,412 bytes
        used +161,080 bytes
        free -161,080 bytes

**GCs**
        full 0 totalling 0ms (0.0% uptime)
        incr 37 totalling 31ms (1.0% uptime), avg 1.0ms
        tenures 4 (avg 9 GCs/tenure)
        root table 0 overflows

_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] [Ann] Port of GOODS database client on public StORE

cdavidshaffer
Am I allowed to reply to my own post? :-)

I was having too much fun working in VW again so I hacked out a
WriteBarrier for the GOODS client using the excellent WriteBarriers
package in the public repo.  I also fixed a caching bug.  Performance is
much improved.  I think this will be a very performant OODB client for
VisualWorks.  Give it a try!

David

_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] [Ann] Port of GOODS database client on public StORE

Björn Eiderbäck-3
In reply to this post by cdavidshaffer
SV: [vwnc] [Ann] Port of GOODS database client on public StORE

Hello,

It seems that msvcr90d.dll is required to run goodsrv.exe.
That DLL is not available on the XP computer that I am using at the moment.
What is the best way to find this DLL?

/Björn

-----Ursprungligt meddelande-----
Från: [hidden email] genom C. David Shaffer
Skickat: to 2008-06-19 22:14
Till: [hidden email]
Ämne: [vwnc] [Ann] Port of GOODS database client on public StORE

I just published a pre-alpha version of a GOODS client for VisualWorks
(works in 7.5 and 7.6) in the public store repo.  All tests pass but
that's all I can say at the moment.  Here's the package comment:

---------------------
A GOODS client for VisualWorks: http://www.garret.ru/~knizhnik/goods.html

This is a port of Avi Bryant's GOODS client for Squeak:

http://wiki.squeak.org/squeak/3492
---------------------

I use GOODS extensively under Squeak.  It's no Gemstone but it is a
solid OODB which, with some TLC, can peform reasonable for many
applications.  I started this port when I thought I had a client who
could use it.  That job never came through so at the moment I don't have
many particular plans for future work on this port.  I use the Squeak
version heavily and hope to port any improvements in that client to this
new one.  The ToDo list includes:

1) more substantial testing
2) core performance improvements: right now the squeak version is twice
as fast on the test suite probably due to my naive socket code.  I'd
love some feedback on this.  Profiles attached.
3) Use of immutability support for a write barrier: looks like the
WriteBarriers package might be of use here but IDK
4) Consider support for cross-smalltalk database (I'm using fully
qualified class names in VW.  In addition, object structure differences
in the core classes mean your databases will not be portable).

David



_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Port of GOODS database client on public StORE

Stefan Schmiedl
In reply to this post by cdavidshaffer
On Fri, 20 Jun 2008 20:36:18 -0400
"C. David Shaffer" <[hidden email]> wrote:

> I was having too much fun working in VW again so I hacked out a
> WriteBarrier for the GOODS client using the excellent WriteBarriers
> package in the public repo.  I also fixed a caching bug.  Performance is
> much improved.  I think this will be a very performant OODB client for
> VisualWorks.  Give it a try!

Hi David,

adventures! copy and paste! red bars galore!

I loaded version 1.9 of your goods port into my image and let the test
run. All failed, which was nice, as I had no goods server running, not
even installed. :-)

I found a goods related entry in the gentoo bugtracker, along with an
ebuild, written by Lukas Renggli in 2004 for goods 2.89. I copied the
ebuild file, renamed it to goods-3.07 and let gentoo work its magic.

Then I copied unidb.cfg and changed it to run goods only on port 2006,
which you use in your tests. Time for "goodsrv unidb" and rerunning
the test suite. All but one run, testTransactions raises an error.

The goods console shows the following info during the test run:

00:31.12 24-JUN-2008: Open session for client 'squeak315B1DA546B'
Send class 'Core.Association' to client
Send class 'Core.Dictionary' to client
Send class 'Core.Association' to client
Send class 'Core.Dictionary' to client
Send class 'Core.ByteString' to client
Send class 'Core.OrderedCollection' to client
00:31.16 24-JUN-2008: Connection with 'squeak315B1DA546B' is lost: connection is broken
Server agent 'squeak315B1DA546B' terminated

The exception is raised while executing the "dbOne rollback" after
adding 11 to: 20 to dbOneNode1. The problem seems to be that
the immutable String 'TestNode1' is sent copyFrom: 'TestNode1',
which is not well received ...

Am I missing something?

The stack dump has the following items on top:

Unhandled exception: Core.NoModificationError
WriteBarriers.Tracker class>>modified:selector:index:value:
ByteString(Object)>>noModificationErrorFor:index:value:
ByteString(Object)>>basicAt:put:
ByteString(Object)>>restoreFrom:
ByteString(Object)>>copyFrom:
optimized [] in [] in GOODS.KKKeyCache>>rollback
optimized [] in GOODS.KKRecordCache>>objectForRecordAt:ifPresent:
Dictionary>>at:ifPresent:
GOODS.KKRecordCache>>objectForRecordAt:ifPresent:
optimized [] in GOODS.KKKeyCache>>rollback
Dictionary>>keysAndValuesDo:
GOODS.KKKeyCache>>rollback
GOODS.KKDatabase>>rollback
GOODS.KKDBTest>>testTransactions

----------------------------------------------------------------------
WriteBarriers.Tracker class>>modified:selector:index:value:
Receiver:
        a WriteBarriers.Tracker class
Instance Variables:
        superclass = Announcer
        methodDict = a MethodDictionary[10]
        format = 16385
        subclasses = an Array[2]
        instanceVariables = an Array[0]
        organization = ('private' #applyModificationTo:selector:index:value: #cannotTrackError #modified:selector:index:value: #privateTrack: #privateUntrack:)
('API' #isTracking: #track: #untrack:)
('initialize-release' #initialize #release)

        name = #Tracker
        classPool = a NameSpaceOfClass[1]
        environment = a NameSpace[2]
Arguments:
        object = 'TestNode1'
        selector = #basicAt:put:
        index = 1
        value = 84
Temporaries:
        anybodyCared = false
Context PC = 23

----------------------------------------------------------------------
ByteString(Object)>>noModificationErrorFor:index:value:
Receiver:
        a ByteString
Arguments:
        selector = #basicAt:put:
        index = 1
        value = 84
Context PC = 8

----------------------------------------------------------------------
ByteString(Object)>>basicAt:put:
Receiver:
        a ByteString
Arguments:
        index = 1
        value = 84
Context PC = 29

----------------------------------------------------------------------
ByteString(Object)>>restoreFrom:
Receiver:
        a ByteString
Arguments:
        otherObject = 'TestNode1'
Temporaries:
        mine = an OrderedCollection[0]
        his = an OrderedCollection[0]
        common = 9
        comm = 0
        ind = 1
        ind = 1
        ind = 1
        ind = nil
Context PC = 98

----------------------------------------------------------------------
ByteString(Object)>>copyFrom:
Receiver:
        a ByteString
Arguments:
        otherObject = 'TestNode1'
Context PC = 4

----------------------------------------------------------------------
optimized [] in [] in GOODS.KKKeyCache>>rollback
Receiver:
        an UndefinedObject
Arguments:
        state = 'TestNode1'
Temporaries:
        .object = 'TestNode1'
Context PC = 6

----------------------------------------------------------------------
optimized [] in GOODS.KKRecordCache>>objectForRecordAt:ifPresent:
Receiver:
        an UndefinedObject
Arguments:
        record = a GOODS.KKObjectRecord
Temporaries:
        .aBlock = BlockClosure [] in [] in GOODS.KKKeyCache>>rollback
        .super = a GOODS.KKRecordCache
Context PC = 9

----------------------------------------------------------------------
Dictionary>>at:ifPresent:
Receiver:
        a Dictionary
Instance Variables:
        tally = 5
Arguments:
        key = 66979
        aBlock = BlockClosure [] in GOODS.KKRecordCache>>objectForRecordAt:ifPresent:
Temporaries:
        found = true
        value = a GOODS.KKObjectRecord
Context PC = 22

----------------------------------------------------------------------
GOODS.KKRecordCache>>objectForRecordAt:ifPresent:
Receiver:
        a GOODS.KKRecordCache
Instance Variables:
        database = a GOODS.KKDatabase
        cache = a Dictionary[5]
        newObjects = an IdentitySet[0]
        classCache = a GOODS.KKClassCache
        allocationCache = a GOODS.KKAllocationCache
Arguments:
        key = 66979
        aBlock = BlockClosure [] in [] in GOODS.KKKeyCache>>rollback
Context PC = 9

----------------------------------------------------------------------
optimized [] in GOODS.KKKeyCache>>rollback
Receiver:
        an UndefinedObject
Arguments:
        key = 66979
        object = 'TestNode1'
Temporaries:
        .super = a GOODS.KKKeyCache
Context PC = 11

----------------------------------------------------------------------
Dictionary>>keysAndValuesDo:
Receiver:
        a Dictionary
Instance Variables:
        tally = 5
Arguments:
        aBlock = BlockClosure [] in GOODS.KKKeyCache>>rollback
Temporaries:
        index = 6
        elem = 66979 -> 'TestNode1'
Context PC = 36

----------------------------------------------------------------------
GOODS.KKKeyCache>>rollback
Receiver:
        a GOODS.KKKeyCache
Instance Variables:
        database = a GOODS.KKDatabase
        cache = a Dictionary[5]
        keys = a WeakDictionary[6]
        recordCache = a GOODS.KKRecordCache
        dirtySet = a GOODS.KKDirtySet
Context PC = 8

----------------------------------------------------------------------
GOODS.KKDatabase>>rollback
Receiver:
        a GOODS.KKDatabase
Instance Variables:
        connection = a GOODS.KKConnection
        keyCache = a GOODS.KKKeyCache
        specialObjects = an IdentityDictionary[1]
Context PC = 3

----------------------------------------------------------------------
GOODS.KKDBTest>>testTransactions
Receiver:
        a GOODS.KKDBTest
Instance Variables:
        testSelector = #testTransactions
        dbOne = a GOODS.KKDatabase
        dbTwo = a GOODS.KKDatabase
        connOne = a GOODS.KKConnection
        connTwo = a GOODS.KKConnection
Temporaries:
        dbOneNode1 = an OrderedCollection[10]
        dbTwoNode1 = an OrderedCollection[10]
Context PC = 70

Thanks,
s.
_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Port of GOODS database client on public StORE

Stefan Schmiedl
On Tue, 24 Jun 2008 00:54:18 +0200
Stefan Schmiedl <[hidden email]> wrote:

> On Fri, 20 Jun 2008 20:36:18 -0400
> "C. David Shaffer" <[hidden email]> wrote:
>
> > I was having too much fun working in VW again so I hacked out a
> > WriteBarrier for the GOODS client using the excellent WriteBarriers
> > package in the public repo.  I also fixed a caching bug.  Performance is
> > much improved.  I think this will be a very performant OODB client for
> > VisualWorks.  Give it a try!
>
> I loaded version 1.9 of your goods port into my image and let the test
> run. All failed, which was nice, as I had no goods server running, not
> even installed. :-)

That still is true for the 1.11 update, you so quickly provided. :-)

> Then I copied unidb.cfg and changed it to run goods only on port 2006,
> which you use in your tests. Time for "goodsrv unidb" and rerunning
> the test suite. All but one run, testTransactions raises an error.

And now all tests run.

Thanks,
s.
_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc