M.Frank LHCb/CERN POOL persistency: Status Current understanding Today’s model Conclusions.

17
M.Frank LHCb/CERN POOL persistency: Status Current understanding Today’s model Conclusions

Transcript of M.Frank LHCb/CERN POOL persistency: Status Current understanding Today’s model Conclusions.

Page 1: M.Frank LHCb/CERN POOL persistency: Status  Current understanding  Today’s model  Conclusions.

M.Frank LHCb/CERN

POOL persistency: Status

Current understanding Today’s model Conclusions

Page 2: M.Frank LHCb/CERN POOL persistency: Status  Current understanding  Today’s model  Conclusions.

M.Frank LHCb/CERN 2POOL

Persistency – What is it about?

Objects & pointers Objects, object IDs, collections & DBs

Transient PersistentC++ pointer => object ID

Page 3: M.Frank LHCb/CERN POOL persistency: Status  Current understanding  Today’s model  Conclusions.

M.Frank LHCb/CERN 3POOL

The Object Model (June)

Page 4: M.Frank LHCb/CERN POOL persistency: Status  Current understanding  Today’s model  Conclusions.

M.Frank LHCb/CERN 4POOL

Cache Access Through References

References know about the Cache Manager References are implemented as smart pointers

Use cache manager for “load-on-demand”Use the object key of the cache manager

Object Identifier in Cache Manager

Reference to Cache Manager

Ref<T>

Pointer to object

Dereference

Page 5: M.Frank LHCb/CERN POOL persistency: Status  Current understanding  Today’s model  Conclusions.

M.Frank LHCb/CERN 5POOL

Cache Access

Key

CacheMgr

Pointer

SmartRef<T>SmartRef<T>

Cache Manager

Persistency Manager

Token

Storage Type

Object Type (GUID)

Persistent Reference

Key Object Token

… … …

2 <pointer> <pointer>

Page 6: M.Frank LHCb/CERN POOL persistency: Status  Current understanding  Today’s model  Conclusions.

M.Frank LHCb/CERN 6POOL

The Object Model (June)

Page 7: M.Frank LHCb/CERN POOL persistency: Status  Current understanding  Today’s model  Conclusions.

M.Frank LHCb/CERN 7POOL

Class Diagram of Today

Page 8: M.Frank LHCb/CERN POOL persistency: Status  Current understanding  Today’s model  Conclusions.

M.Frank LHCb/CERN 8POOL

Typical Calling Sequence

Page 9: M.Frank LHCb/CERN POOL persistency: Status  Current understanding  Today’s model  Conclusions.

M.Frank LHCb/CERN 9POOL

Persistency Interface

Read Object accessreadObject

Transaction handlingStart, commit, rollback

Register objects for writing

Page 10: M.Frank LHCb/CERN POOL persistency: Status  Current understanding  Today’s model  Conclusions.

M.Frank LHCb/CERN 10POOL

Writing Objects

Supported by IPersistencyMgr

Start transaction Loop 1 … n

Mark objects for write: requires placement hint

End Transaction Commit Rollback (if supported by database)

Page 11: M.Frank LHCb/CERN POOL persistency: Status  Current understanding  Today’s model  Conclusions.

M.Frank LHCb/CERN 11POOL

Model Assumptions

Data Cache StorageMgr

DiskStoragedatabasedatabaseDatabase

ContainerContainerContainer

ObjectsObjectsObjectsObjectsObjectsObjectsObjectsObjects

•Class GUID

•Cache hints [0..*]

Storage type

DB name

Cont.nameItem ID

Page 12: M.Frank LHCb/CERN POOL persistency: Status  Current understanding  Today’s model  Conclusions.

M.Frank LHCb/CERN 12POOL

Link ID Link Info

DB/Cont.name,...... ...

<number>

Local lookup table in each file

Follow Persistent References

Entry IDLink ID

XID

(2)(3)(4)

(1)

Key Object Token

1 <pointer> <pointer>

2 --------------- <pointer>

Page 13: M.Frank LHCb/CERN POOL persistency: Status  Current understanding  Today’s model  Conclusions.

M.Frank LHCb/CERN 13POOL

The Link Table

Contains all information to resurrect an objectStorage identifier INTDatabase “name” stringContainer name stringClass identifier GUIDCache hints string []

E.g. other possible transient conversions

Make sure the object model does not go wild!

Page 14: M.Frank LHCb/CERN POOL persistency: Status  Current understanding  Today’s model  Conclusions.

M.Frank LHCb/CERN 14POOL

Conclusions

I think this model could work very nicely for any persistency technology based on database files, collections and objects within collections

The main thinking is done Think about some optimizations,

which cannot be introduced later Looks like it’s about time to start prototyping

Page 15: M.Frank LHCb/CERN POOL persistency: Status  Current understanding  Today’s model  Conclusions.

M.Frank LHCb/CERN 15POOL

Persistent Objects

What is the default? Objectivity, OOCI:

Everything is persistent unless deleted before commit

ROOT, RDBMS: Nothing is persistent unless explicitly saved ROOT: Tobject::Write(), Ttree::Fill() etc. RDBMS: INSERT INTO <table> VALUES (…)

…has consequences on allocation mechanism

Page 16: M.Frank LHCb/CERN POOL persistency: Status  Current understanding  Today’s model  Conclusions.

M.Frank LHCb/CERN 16POOL

Persistent Object Allocation

First possibility: During “Mark objects for write”

In registerObjectForWrite(…) Client can know immediately if object can be

written Better handle for corrective actions Create persistent token

In endTransaction(…) Fill data, resolve references and update row

“unregisterObjectFromWrite” difficultTransaction may be open for a long time

Page 17: M.Frank LHCb/CERN POOL persistency: Status  Current understanding  Today’s model  Conclusions.

M.Frank LHCb/CERN 17POOL

Persistent Object Allocation

Second possibility: During “End Transaction”

In markObjectForWrite(…) Trivial. Simply collects object pointers “unregisterObjectFromWrite” trivial

In endTransaction(…) Create persistent token Fill data, resolve references and update row

Only bulk transaction/conversion statusOn failure drop all