# HG changeset patch # User Paul Boddie # Date 1494887834 -7200 # Node ID 55040ff1aba265f0d156252a6759e6f5daaa34e4 # Parent 09ac27220fe15dbe1a4f67286f354d2e75b21ef8 Added quota illustrations and an explicit introduction of the journal concept. diff -r 09ac27220fe1 -r 55040ff1aba2 docs/wiki/Resources --- a/docs/wiki/Resources Sun Apr 02 22:15:30 2017 +0200 +++ b/docs/wiki/Resources Tue May 16 00:37:14 2017 +0200 @@ -376,19 +376,95 @@ === Quota Controls === In contrast to each user's stored information which consolidates information -related to that user's own schedule, the quota system consolidates information -related to the schedules of one or more resources, thus enabling observations -to be made about their collective usage. +related to that user's own schedule in a section of the data store, the quota +system consolidates information related to the schedules of one or more +resources in a repository known as the journal, thus enabling observations to +be made about their collective usage. First, consider a resource such as a car where an organiser of an event may be booking the car for travel purposes. A quota prevents the organiser from booking the resource too much and denying other users access to it. +{{{#!graphviz +//format=svg +//transform=notugly +digraph quota_users { + node [shape=box,fontsize="13.0",fontname="Helvetica",tooltip="Quota example"]; + edge [tooltip="Quota example"]; + + subgraph { + rank=same; + reservation1 [label="Reservation from oliver.otter@example.com\nMonday at 10am",shape=folder,style=filled,fillcolor=cyan]; + reservation2 [label="Reservation from oliver.otter@example.com\nTuesday at 10am",shape=folder,style=filled,fillcolor=cyan]; + reservation3 [label="Reservation from oliver.otter@example.com\nWednesday at 10am",shape=folder,style=filled,fillcolor=cyan]; + } + + subgraph { + rank=same; + test1 [label="Within quota?",shape=ellipse,style=filled,fillcolor=gold]; + test2 [label="Within quota?",shape=ellipse,style=filled,fillcolor=gold]; + test3 [label="Within quota?",shape=ellipse,style=filled,fillcolor=gold]; + } + + subgraph { + rank=max; + quota [label="Quota for resource-car-pontiac@example.com",shape=folder]; + } + + reservation1 -> test1; + reservation2 -> test2; + reservation3 -> test3; + + quota -> test1; + quota -> test2; + quota -> test3; +} +}}} + Now consider a number of separate car resources. An organiser might attempt to get around any individual resource quota by booking a number of different cars. +Since each car is only aware of its own usage, it would be unaware of the +undesirable cumulative usage of all cars by the organiser. + By grouping the resources together, the organiser will exhaust any quota set on the group of resources as they try and make reservations for the different -members of the quota group. +members of the quota group. Some additional measures are introduced as follows: + +{{{#!graphviz +//format=svg +//transform=notugly +digraph quota_users { + node [shape=box,fontsize="13.0",fontname="Helvetica",tooltip="Quota example"]; + edge [tooltip="Quota example"]; + + subgraph { + rank=same; + reservation1 [label="Reservation from oliver.otter@example.com\nMonday at 10am",shape=folder,style=filled,fillcolor=cyan]; + reservation2 [label="Reservation from oliver.otter@example.com\nTuesday at 10am",shape=folder,style=filled,fillcolor=cyan]; + reservation3 [label="Reservation from oliver.otter@example.com\nWednesday at 10am",shape=folder,style=filled,fillcolor=cyan]; + } + + subgraph { + rank=same; + car1 [label="resource-car-pontiac@example.com",shape=folder]; + car2 [label="resource-car-cadillac@example.com",shape=folder]; + car3 [label="resource-car-lexus@example.com",shape=folder]; + } + + test [label="Within common quota?",shape=ellipse,style=filled,fillcolor=gold]; + + subgraph { + rank=max; + journal [label="Quota for cars",shape=folder]; + } + + reservation1 -> car1 -> test; + reservation2 -> car2 -> test; + reservation3 -> car3 -> test; + + journal -> test; +} +}}} ==== Initialising Quotas ====