VMWizardAdvanced now prevents snode == pnode
[ganeti_webmgr.git] / docs / source / features / caching.rst
blobf2ac84ad36e5248a1c1b9e1553d6949898395ccb
1 Nope! This page is defunct (Cache System)
2 =========================================
4 .. figure:: /_static/ganeti_cache.png
5    :align: center
7 Ganeti Web Manager uses a cache system that stores information about
8 ganeti clusters in the database. This allows the following:
10 -  Permissions are stored in the database and are associated to the
11    cached objects
12 -  The cached data can be searched and or filtered
13 -  Limits the amount of traffic between the webserver and ganeti
14    cluster.
16 The cache system is transparent and will load cached data automatically
17 when the object is initialized.
19 .. _lazy-cache:
21 Lazy Cache Refresh
22 ------------------
24 Cached objects will refresh themselves transparently when they are out
25 of date. This happens transparently when objects are queried from the
26 ORM. Lazy cache refreshing is inefficient, it will cause multiple calls
27 to the ganeti RAPI to fetch information. For this reason the lazy
28 refresh mechanism is intended to only be used for testing, and as a
29 backup to ensure that objects will always be refreshed.
32 .. _periodic-cache-updater:
34 CachedClusterObject
35 -------------------
37 The functionality for lazy caching is built into an abstract model,
38 CachedClusterObject. Extending this model will enable caching for the
39 object. It requires that **\_refresh()** be implemented with an object
40 specific method for querying fresh info from ganeti. Currently only
41 Cluster and VirtualMachine are cached, but this may extend to Node and
42 Job objects in the future.
44 **parse\_persistent\_info()** can be overridden to parse object specific
45 properties that should be stored in the database. This allows properties
46 to be used as query filters, without requiring the entire object to be
47 loaded.
49 Bypassing The Cache Refresh
50 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
52 It is not currently possible to bypass the automatic cache refresh in a
53 simple way since it is part of the models ***init***. Currently the only
54 way to bypass the cache is to query the object with a values or
55 values\_list query, and copy the values into a new object.
59     values = VirtualMachine.objects.get(id=id)
60     vm = VirtualMachine()
61     for k, v in values.items():
62         setattr(vm, k , v)
64 RAPI Client Cache
65 -----------------
67 Ganeti remote API clients are also cached. This reduces the number of
68 database calls to retrieve a client capable of connecting to a cluster.
69 This is a deterministic cache based off connection credentials. The keys
70 are a hash of hostname, port, user, and password. This allows changes in
71 settings to be easily detected. Cached objects should store the hash as
72 part of its model and use it to look up existing clients without
73 querying the cluster for the full set of connection credentials.