@@ -21,7 +21,7 @@ LANGUAGE C;
21
21
-- - functions.
22
22
-- -
23
23
24
- CREATE TABLE mtm .nodes (
24
+ CREATE TABLE mtm .cluster_nodes (
25
25
id int primary key not null ,
26
26
conninfo text not null ,
27
27
is_self bool not null ,
@@ -34,7 +34,7 @@ AS 'MODULE_PATHNAME','mtm_after_node_create'
34
34
LANGUAGE C;
35
35
36
36
CREATE TRIGGER on_node_create
37
- AFTER INSERT ON mtm .nodes
37
+ AFTER INSERT ON mtm .cluster_nodes
38
38
FOR EACH ROW
39
39
EXECUTE FUNCTION mtm .after_node_create ();
40
40
@@ -44,59 +44,77 @@ AS 'MODULE_PATHNAME','mtm_after_node_drop'
44
44
LANGUAGE C;
45
45
46
46
CREATE TRIGGER on_node_drop
47
- AFTER DELETE ON mtm .nodes
47
+ AFTER DELETE ON mtm .cluster_nodes
48
48
FOR EACH ROW
49
49
EXECUTE FUNCTION mtm .after_node_drop ();
50
50
51
- CREATE FUNCTION mtm .join_node(node_id int )
52
- RETURNS VOID
53
- AS ' MODULE_PATHNAME' ,' mtm_join_node '
51
+ CREATE FUNCTION mtm .node_info(id int )
52
+ RETURNS mtm . node_info
53
+ AS ' MODULE_PATHNAME' ,' mtm_node_info '
54
54
LANGUAGE C;
55
55
56
+ CREATE TYPE mtm .node_info AS (
57
+ " enabled" bool,
58
+ " connected" bool,
59
+ " sender_pid" int ,
60
+ " receiver_pid" int ,
61
+ " n_workers" int ,
62
+ " receiver_status" text
63
+ );
64
+
56
65
-- -
57
- -- - User facing API for node management.
66
+ -- - User facing API for node info and management.
58
67
-- -
59
68
60
- CREATE OR REPLACE FUNCTION mtm .init_node(node_id integer , connstrs text []) RETURNS void AS
61
- $$
62
- BEGIN
63
- IF node_id <= 0 OR node_id > least(16 , array_length(connstrs, 1 )) THEN
64
- RAISE EXCEPTION ' node_id should be in range [1 .. length(connstrs)]' ;
65
- END IF;
66
- -- XXX
67
- EXECUTE ' SET mtm.emerging_node_id = ' || node_id || ' ;' ;
68
- INSERT INTO mtm .nodes SELECT
69
- ordinality::int as id,
70
- unnest as conninfo,
71
- ordinality = current_setting(' mtm.emerging_node_id' )::int as is_self
72
- FROM
73
- unnest(connstrs)
74
- WITH ORDINALITY;
75
- END
76
- $$
77
- LANGUAGE plpgsql;
69
+ CREATE OR REPLACE FUNCTION mtm .init_cluster(my_conninfo text , peers_conninfo text [])
70
+ RETURNS VOID
71
+ AS ' MODULE_PATHNAME' ,' mtm_init_cluster'
72
+ LANGUAGE C;
73
+
74
+ CREATE TYPE mtm .cluster_status AS (
75
+ " my_node_id" int ,
76
+ " status" text ,
77
+ " n_nodes" int ,
78
+ " n_connected" int ,
79
+ " n_enabled" int
80
+ );
81
+
82
+ CREATE FUNCTION mtm .status()
83
+ RETURNS mtm .cluster_status
84
+ AS ' MODULE_PATHNAME' ,' mtm_status'
85
+ LANGUAGE C;
86
+
87
+ CREATE VIEW mtm .nodes AS
88
+ SELECT id, conninfo, is_self, (mtm .node_info (id)).* FROM mtm .cluster_nodes ;
78
89
79
90
CREATE OR REPLACE FUNCTION mtm .add_node(connstr text ) RETURNS void AS
80
91
$$
81
92
DECLARE
82
93
new_node_id int ;
83
94
BEGIN
84
- -- XXX: add only to a configured mm?
85
-
86
- INSERT INTO mtm .nodes SELECT
87
- min (unused_ids .id ), connstr, ' false'
95
+ INSERT INTO mtm .cluster_nodes SELECT
96
+ min (unused_ids .id ), connstr, ' false' , ' false'
88
97
FROM (
89
98
SELECT id FROM generate_series(1 ,16 ) id
90
99
EXCEPT
91
- SELECT id FROM mtm .nodes
100
+ SELECT id FROM mtm .cluster_nodes
92
101
) unused_ids
93
102
RETURNING id INTO new_node_id;
94
-
95
- -- SELECT mtm.node_join(new_node_id, connstr);
96
103
END
97
104
$$
98
105
LANGUAGE plpgsql;
99
106
107
+ CREATE OR REPLACE FUNCTION mtm .drop_node(node_id int ) RETURNS void AS
108
+ $$
109
+ DELETE FROM mtm .cluster_nodes WHERE id = $1 ;
110
+ $$
111
+ LANGUAGE sql;
112
+
113
+ CREATE FUNCTION mtm .join_node(node_id int )
114
+ RETURNS VOID
115
+ AS ' MODULE_PATHNAME' ,' mtm_join_node'
116
+ LANGUAGE C;
117
+
100
118
-- -
101
119
-- - Various
102
120
-- -
0 commit comments