From 1da20e8c71dac9cb9b800be30c179f7290b292ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Wisniewski?= <gregory@nexedi.com> Date: Mon, 8 Mar 2010 20:44:34 +0000 Subject: [PATCH] Update perfs tool to not rewrite a patched copyTransactionsFrom(). Allow use our own copyTransactionsFrom with a smarter monkey patch to compute statistics. git-svn-id: https://svn.erp5.org/repos/neo/trunk@1928 71dcc9de-d417-0410-9af5-da40c76e7ee4 --- tools/perfs | 51 +++++++++++++++++---------------------------------- 1 file changed, 17 insertions(+), 34 deletions(-) diff --git a/tools/perfs b/tools/perfs index 4169c2fd..bf04e554 100755 --- a/tools/perfs +++ b/tools/perfs @@ -15,54 +15,37 @@ from neo.profiling import PROFILING_ENABLED, profiler_decorator, \ def runImport(neo, datafs): - @profiler_decorator - def _copyTransactionsFrom(self, other): - """ taken from ZODB.BaseStorage that build stat during import """ - def inc(d): + def counter(wrapped, d): + @profiler_decorator + def wrapper(*args, **kw): # count number of tick per second t = int(time()) d.setdefault(t, 0) d[t] += 1 - def updateLastSerial(oid, result): - if result: - if isinstance(result, str): - assert oid is not None - preindex[oid] = result - else: - for oid, serial in result: - assert isinstance(serial, str), serial - preindex[oid] = serial - txn = {} - obj = {} - preindex = {} - fiter = other.iterator() - for transaction in fiter: - inc(txn) - self.tpc_begin(transaction, transaction.tid, transaction.status) - for r in transaction: - inc(obj) - pre = preindex.get(r.oid, None) - s = self.store(r.oid, pre, r.data, r.version, transaction) - updateLastSerial(r.oid, s) - updateLastSerial(None, self.tpc_vote(transaction)) - self.tpc_finish(transaction) - fiter.close() - return { - 'Transactions': txn.values(), - 'Objects': obj.values(), - } + # call original method + wrapped(*args, **kw) + return wrapper # open storages clients neo_storage = neo.getZODBStorage() dfs_storage = FileStorage(file_name=datafs) dfs_size = os.path.getsize(datafs) - # monkey patch import method and run the import + # monkey patch storage + txn_dict, obj_dict = {}, {} + neo_storage.app.tpc_begin = counter(neo_storage.app.tpc_begin, txn_dict) + neo_storage.app.store = counter(neo_storage.app.store, obj_dict) + + # run import start = time() - Storage.copyTransactionsFrom = _copyTransactionsFrom stats = neo_storage.copyTransactionsFrom(dfs_storage) elapsed = time() - start + # return stats + stats = { + 'Transactions': txn_dict.values(), + 'Objects': obj_dict.values(), + } return (dfs_size, elapsed, stats) def buildReport(config, dfs_size, elapsed, stats): -- 2.30.9