Abort and print when dependencies not met.
[ganeti_webmgr.git] / docs / source / caching.rst
blobb1c31eb16282eec433ab44023a15a30312d07e24
1 =======
2 Caching
3 =======
5 Ganeti Web Manager caches objects for performance reasons.
7 Why are things cached?
8 ======================
10 Ganeti is a bottleneck when accessing data. In tests, over 97% of time taken
11 to render a normal page in Ganeti Web Manager is spent waiting for Ganeti to
12 respond to queries. Thus, Ganeti Web Manager caches some of Ganeti's data.
14 Manual Updates
15 ==============
17 Sometimes it is necessary to refresh objects manually. To do this, navigate to
18 the detail page for the cluster of the object that needs to be refreshed, and
19 click the "Refresh" button. This will refresh the cluster and all of its
20 objects.
22 Cached Cluster Objects
23 ======================
25 Some database-bound objects cache Ganeti data automatically. The functionality
26 for this caching is encapsulated in the ``CachedClusterObject`` class. Any
27 models which inherit from this class will gain this functionality.
29 Bypassing the Cache
30 -------------------
32 The cache cannot currently be bypassed reasonably. ``CachedClusterObject``
33 uses ``__init__()`` to do part of its work. An unreasonable, albeit working,
34 technique is to abuse the ORM::
36     values = VirtualMachine.objects.get(id=id)
37     vm = VirtualMachine()
38     for k, v in values.items():
39         setattr(vm, k, v)
41 RAPI Cache
42 ==========
44 RAPI clients are cached in memory, and a hash of cluster information is stored
45 in order to locate them quickly. The entire scheme is no longer necessary
46 since RAPI clients are no longer expensive to allocate, and will be removed
47 soon.