A held module is composed exactly as before it joined, at the build its machine runs, so its port, resources and contributions stay. A joining module's directories belong to its user and its own group, and its tools' directories are refused closed to that group; the runner joins it where the engine can say so. A take records the root and is taken only when the engine states the act done. Libraries' paths and verdicts count modules pulled in by a requirement, and a unit takes the identity.
51 lines
3.2 KiB
SQL
51 lines
3.2 KiB
SQL
-- A module that joins has a user and a group of its own, each library has a group of its own, and a library's
|
||
-- existing data is taken once, on the operator's word (novox/hq ADR 0328 §3, §4, §7, §15).
|
||
--
|
||
-- **One sequence for every number the mesh gives.** A joining module is given one number, its user's and its own
|
||
-- group's (mesh-<module>); a library is given one, its group's (mesh-<library>). Both are drawn from this sequence, so
|
||
-- a module's own group and a library's group never share a number. The range is 50000–59999 (catalogue.IdentityLow and
|
||
-- IdentityHigh): above the numbers distributions give people, below the 60000s Debian keeps for its daemons, and
|
||
-- nowhere near root's 0 or a root group's (0, 4, 10). The checks refuse a row outside it, so no write, by hand or by a
|
||
-- later bug, can make one root's (§15). A sequence never hands a number back, and a row is kept after its module or
|
||
-- library is gone, so a number once given is never given to another: a file left owned by a removed module's user is
|
||
-- never inherited by a new one.
|
||
create sequence mesh_number as integer minvalue 50000 maxvalue 59999 start 50000 no cycle;
|
||
|
||
create table module_identity (
|
||
module text primary key,
|
||
uid integer not null unique check (uid between 50000 and 59999),
|
||
allocated timestamptz not null default now()
|
||
);
|
||
|
||
create table library_group (
|
||
library text primary key,
|
||
gid integer not null unique check (gid between 50000 and 59999),
|
||
allocated timestamptz not null default now()
|
||
);
|
||
|
||
-- **A library taken** (§7). The first time a library's root on its home holds data not yet in its group, the operator
|
||
-- is asked once for that library; on the warrant the node-engine sets the group, group write and setgid under the root,
|
||
-- and the library is taken: kept from then on without asking. The row is the record of that act — on which machine
|
||
-- root and filesystem, who approved it, under which warrant. A library whose home, root or filesystem changed since
|
||
-- (it moved to another machine, path or disk) is not taken by that warrant, and the operator is asked again; a new take
|
||
-- replaces the row.
|
||
create table kept_library (
|
||
library text primary key,
|
||
home text not null,
|
||
-- The root it was taken at: a library whose root changed since is taken again.
|
||
root text not null check (root like '/%'),
|
||
-- The filesystem the root was on when taken, as the engine names it without a path ("fs-<12 hex>"); empty when
|
||
-- the engine named none.
|
||
placed text not null default '',
|
||
taken_at timestamptz not null default now(),
|
||
taken_by text not null,
|
||
ask text not null,
|
||
warrant text not null,
|
||
-- What the node-engine answered when it started the take.
|
||
said text not null default '',
|
||
-- Whether the engine has stated the take's act done under this warrant: only then is the library taken. Until
|
||
-- then the take is under way — the library still waits, and the operator is not asked again — and an act stated
|
||
-- failed forgets the row, so the operator is asked again.
|
||
done boolean not null default false
|
||
);
|