Skip to content
Snippets Groups Projects
Commit 18b4b45a authored by Joris van Zwieten's avatar Joris van Zwieten
Browse files

BugID: 1037

- Added trigger/notification for insert of initialize, finalize, nextchunk results.
- Updated add_result() stored procedure, now returns bool.
- Removed command_queue_empty() as it was no longer used.
parent 761a490d
Branches
Tags
No related merge requests found
...@@ -32,7 +32,7 @@ $$ ...@@ -32,7 +32,7 @@ $$
SELECT COUNT(1) SELECT COUNT(1)
FROM FROM
( (
SELECT COUNT(1) SELECT 1
FROM blackboard.result FROM blackboard.result
WHERE node = inet_client_addr() WHERE node = inet_client_addr()
LIMIT 1 LIMIT 1
...@@ -45,29 +45,33 @@ $$ ...@@ -45,29 +45,33 @@ $$
LANGUAGE plpgsql; LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION blackboard.command_queue_empty() --CREATE OR REPLACE FUNCTION blackboard.command_queue_empty()
RETURNS BOOL AS --RETURNS BOOL AS
$$ --$$
SELECT -- SELECT
( -- (
SELECT COUNT(1) -- SELECT COUNT(1)
FROM -- FROM
( -- (
SELECT 1 -- SELECT 1
FROM blackboard.command -- FROM blackboard.command
LIMIT 1 -- LIMIT 1
) -- )
AS tmp -- AS tmp
) = 0; -- ) = 0;
$$ --$$
LANGUAGE SQL; --LANGUAGE SQL;
-- (PRIVATE FUNCTION, DO NOT CALL FROM C++) -- (PRIVATE FUNCTION, DO NOT CALL FROM C++)
CREATE OR REPLACE FUNCTION blackboard.get_next_command_id() CREATE OR REPLACE FUNCTION blackboard.get_next_command_id()
RETURNS INTEGER AS RETURNS INTEGER AS
$$ $$
DECLARE
_id INTEGER;
BEGIN
SELECT id SELECT id
INTO _id
FROM blackboard.command FROM blackboard.command
WHERE id NOT IN WHERE id NOT IN
( (
...@@ -77,8 +81,15 @@ $$ ...@@ -77,8 +81,15 @@ $$
) )
ORDER BY id ORDER BY id
LIMIT 1; LIMIT 1;
IF FOUND THEN
RETURN _id;
END IF;
RETURN 0;
END;
$$ $$
LANGUAGE SQL; LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION blackboard.get_next_command() CREATE OR REPLACE FUNCTION blackboard.get_next_command()
...@@ -110,7 +121,7 @@ CREATE OR REPLACE FUNCTION blackboard.set_strategy ...@@ -110,7 +121,7 @@ CREATE OR REPLACE FUNCTION blackboard.set_strategy
RETURNS BOOLEAN AS RETURNS BOOLEAN AS
$$ $$
BEGIN BEGIN
IF (SELECT COUNT(*) FROM blackboard.strategy) <> 0 THEN IF (SELECT COUNT(1) FROM blackboard.strategy) <> 0 THEN
RETURN FALSE; RETURN FALSE;
END IF; END IF;
...@@ -268,13 +279,6 @@ $$ ...@@ -268,13 +279,6 @@ $$
LANGUAGE SQL; LANGUAGE SQL;
CREATE OR REPLACE FUNCTION blackboard.get_nextchunk_args(_command_id INTEGER)
RETURNS VOID AS
$$
$$
LANGUAGE SQL;
CREATE OR REPLACE FUNCTION blackboard.add_nextchunk_command() CREATE OR REPLACE FUNCTION blackboard.add_nextchunk_command()
RETURNS VOID AS RETURNS VOID AS
$$ $$
...@@ -285,6 +289,13 @@ $$ ...@@ -285,6 +289,13 @@ $$
LANGUAGE plpgsql; LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION blackboard.get_nextchunk_args(_command_id INTEGER)
RETURNS VOID AS
$$
$$
LANGUAGE SQL;
CREATE OR REPLACE FUNCTION blackboard.add_predict_command CREATE OR REPLACE FUNCTION blackboard.add_predict_command
(command_args blackboard.iface_predict_args) (command_args blackboard.iface_predict_args)
RETURNS VOID AS RETURNS VOID AS
...@@ -425,20 +436,19 @@ CREATE OR REPLACE FUNCTION blackboard.add_result ...@@ -425,20 +436,19 @@ CREATE OR REPLACE FUNCTION blackboard.add_result
(_command_id INTEGER, (_command_id INTEGER,
_result_code INTEGER, _result_code INTEGER,
_message TEXT) _message TEXT)
RETURNS VOID AS RETURNS BOOL AS
$$ $$
DECLARE
last_id INTEGER;
BEGIN BEGIN
IF blackboard.command_queue_empty() IF _command_id > 0
OR _command_id != blackboard.get_next_command_id() AND _command_id = blackboard.get_next_command_id()
THEN THEN
RAISE EXCEPTION
'Attempt to add result for a command that is not current';
END IF;
INSERT INTO blackboard.result(command_id, result_code, message) INSERT INTO blackboard.result(command_id, result_code, message)
VALUES (_command_id, _result_code, _message); VALUES (_command_id, _result_code, _message);
RETURN FOUND;
END IF;
RETURN FALSE;
END; END;
$$ $$
LANGUAGE plpgsql; LANGUAGE plpgsql;
......
...@@ -82,7 +82,9 @@ CREATE TABLE blackboard.result ...@@ -82,7 +82,9 @@ CREATE TABLE blackboard.result
timestamp TIMESTAMP WITH TIME ZONE DEFAULT now(), timestamp TIMESTAMP WITH TIME ZONE DEFAULT now(),
node INET DEFAULT inet_client_addr(), node INET DEFAULT inet_client_addr(),
result_code INTEGER NOT NULL, result_code INTEGER NOT NULL,
message TEXT NOT NULL message TEXT NOT NULL,
UNIQUE (command_id, node)
); );
......
CREATE OR REPLACE FUNCTION blackboard.notify_client() RETURNS TRIGGER AS CREATE OR REPLACE FUNCTION blackboard.notify() RETURNS TRIGGER AS
$$ $$
BEGIN BEGIN
EXECUTE 'NOTIFY ' || quote_ident(TG_NAME); EXECUTE 'NOTIFY ' || quote_ident(TG_NAME);
...@@ -7,10 +7,27 @@ $$ ...@@ -7,10 +7,27 @@ $$
$$ $$
LANGUAGE plpgsql; LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION blackboard.notify_result() RETURNS TRIGGER AS
$$
DECLARE
cmd_type TEXT;
BEGIN
cmd_type := "Type" FROM blackboard.command WHERE id = NEW.command_id;
IF cmd_type ~ 'initialize|finalize|nextchunk' THEN
-- RAISE NOTICE 'NOTIFY %', quote_ident(TG_NAME) || '_' || cmd_type;
EXECUTE 'NOTIFY ' || quote_ident(TG_NAME) || '_' || cmd_type;
END IF;
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
CREATE TRIGGER insert_command CREATE TRIGGER insert_command
AFTER INSERT ON blackboard.command AFTER INSERT ON blackboard.command
FOR EACH STATEMENT EXECUTE PROCEDURE blackboard.notify_client(); FOR EACH STATEMENT EXECUTE PROCEDURE blackboard.notify();
CREATE TRIGGER insert_result CREATE TRIGGER insert_result
AFTER INSERT ON blackboard.result AFTER INSERT ON blackboard.result
FOR EACH STATEMENT EXECUTE PROCEDURE blackboard.notify_client(); FOR EACH ROW EXECUTE PROCEDURE blackboard.notify_result();
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment