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
No related branches found
No related tags found
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,40 +45,51 @@ $$ ...@@ -45,40 +45,51 @@ $$
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
$$ $$
SELECT id DECLARE
FROM blackboard.command _id INTEGER;
WHERE id NOT IN BEGIN
( SELECT id
SELECT command_id INTO _id
FROM blackboard.result FROM blackboard.command
WHERE node = inet_client_addr() WHERE id NOT IN
) (
ORDER BY id SELECT command_id
LIMIT 1; FROM blackboard.result
WHERE node = inet_client_addr()
)
ORDER BY id
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 INSERT INTO blackboard.result(command_id, result_code, message)
'Attempt to add result for a command that is not current'; VALUES (_command_id, _result_code, _message);
RETURN FOUND;
END IF; END IF;
INSERT INTO blackboard.result(command_id, result_code, message) RETURN FALSE;
VALUES (_command_id, _result_code, _message);
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();
...@@ -61,11 +61,11 @@ CREATE TYPE blackboard.iface_solve_args AS ...@@ -61,11 +61,11 @@ CREATE TYPE blackboard.iface_solve_args AS
"Sources" TEXT, "Sources" TEXT,
"InstrumentModel" TEXT, "InstrumentModel" TEXT,
"OutputData" TEXT, "OutputData" TEXT,
"Solve.MaxIter" INTEGER, "Solve.MaxIter" INTEGER,
"Solve.Epsilon" DOUBLE PRECISION, "Solve.Epsilon" DOUBLE PRECISION,
"Solve.MinConverged" DOUBLE PRECISION, "Solve.MinConverged" DOUBLE PRECISION,
"Solve.Parms" TEXT, "Solve.Parms" TEXT,
"Solve.ExclParms" TEXT, "Solve.ExclParms" TEXT,
"Solve.DomainSize.Freq" DOUBLE PRECISION, "Solve.DomainSize.Freq" DOUBLE PRECISION,
"Solve.DomainSize.Time" DOUBLE PRECISION "Solve.DomainSize.Time" DOUBLE PRECISION
); );
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment