liquid_feedback_core
changeset 332:f17ee916711a
Bugfixes for new system to allow the background job (lf_update) run without intensive locking
author | jbe |
---|---|
date | Fri Feb 15 02:13:09 2013 +0100 (2013-02-15) |
parents | c705309b5727 |
children | b83ab26828a8 |
files | core.sql |
line diff
1.1 --- a/core.sql Thu Feb 14 23:50:50 2013 +0100 1.2 +++ b/core.sql Fri Feb 15 02:13:09 2013 +0100 1.3 @@ -1582,19 +1582,6 @@ 1.4 "issue_row" "issue"%ROWTYPE; 1.5 "direct_voter_update_v" BOOLEAN; 1.6 BEGIN 1.7 - "direct_voter_update_v" := FALSE; 1.8 - IF TG_RELID = 'direct_voter'::regclass AND TG_OP = 'UPDATE' THEN 1.9 - IF 1.10 - OLD."issue_id" = NEW."issue_id" AND 1.11 - OLD."member_id" = NEW."member_id" AND 1.12 - OLD."weight" = NEW."weight" 1.13 - THEN 1.14 - IF OLD."weight" = NEW."weight" THEN 1.15 - RETURN NULL; -- allows changing of voter comment 1.16 - END IF; 1.17 - "direct_voter_update_v" := TRUE; 1.18 - END IF; 1.19 - END IF; 1.20 IF TG_OP = 'DELETE' THEN 1.21 "issue_id_v" := OLD."issue_id"; 1.22 ELSE 1.23 @@ -1603,13 +1590,26 @@ 1.24 SELECT INTO "issue_row" * FROM "issue" 1.25 WHERE "id" = "issue_id_v" FOR SHARE; 1.26 IF "issue_row"."closed" NOTNULL THEN 1.27 + IF 1.28 + TG_RELID = 'direct_voter'::regclass AND 1.29 + TG_OP = 'UPDATE' 1.30 + THEN 1.31 + IF 1.32 + OLD."issue_id" = NEW."issue_id" AND 1.33 + OLD."member_id" = NEW."member_id" AND 1.34 + OLD."weight" = NEW."weight" 1.35 + THEN 1.36 + RETURN NULL; -- allows changing of voter comment 1.37 + END IF; 1.38 + END IF; 1.39 RAISE EXCEPTION 'Tried to modify data belonging to a closed issue.'; 1.40 ELSIF 1.41 "issue_row"."state" = 'voting' AND 1.42 - "issue_row"."phase_finished" NOTNULL AND 1.43 - "direct_voter_update_v" = FALSE -- allow change of weight during calculation 1.44 + "issue_row"."phase_finished" NOTNULL 1.45 THEN 1.46 - RAISE EXCEPTION 'Tried to modify data after voting has been closed.'; 1.47 + IF TG_RELID = 'vote'::regclass THEN 1.48 + RAISE EXCEPTION 'Tried to modify data after voting has been closed.'; 1.49 + END IF; 1.50 END IF; 1.51 RETURN NULL; 1.52 END; 1.53 @@ -3667,10 +3667,11 @@ 1.54 WHERE "issue_id" = "issue_id_p" AND "admitted" = TRUE 1.55 ) THEN 1.56 UPDATE "issue" SET 1.57 - "state" = 'voting', 1.58 - "accepted" = coalesce("accepted", "phase_finished"), 1.59 - "half_frozen" = coalesce("half_frozen", "phase_finished"), 1.60 - "fully_frozen" = "phase_finished" 1.61 + "state" = 'voting', 1.62 + "accepted" = coalesce("accepted", "phase_finished"), 1.63 + "half_frozen" = coalesce("half_frozen", "phase_finished"), 1.64 + "fully_frozen" = "phase_finished", 1.65 + "phase_finished" = NULL 1.66 WHERE "id" = "issue_id_p"; 1.67 ELSE 1.68 UPDATE "issue" SET 1.69 @@ -3679,7 +3680,7 @@ 1.70 "half_frozen" = coalesce("half_frozen", "phase_finished"), 1.71 "fully_frozen" = "phase_finished", 1.72 "closed" = "phase_finished", 1.73 - "ranks_available" = TRUE 1.74 + "phase_finished" = NULL 1.75 WHERE "id" = "issue_id_p"; 1.76 -- NOTE: The following DELETE statements have effect only when 1.77 -- issue state has been manipulated 1.78 @@ -4320,16 +4321,16 @@ 1.79 THEN 1.80 PERFORM "set_harmonic_initiative_weights"("issue_id_p"); 1.81 "persist"."harmonic_weights_set" = TRUE; 1.82 - IF "persist"."phase_finished" OR "persist"."issue_revoked" THEN 1.83 + IF 1.84 + "persist"."phase_finished" OR 1.85 + "persist"."issue_revoked" OR 1.86 + "persist"."state" = 'admission' 1.87 + THEN 1.88 RETURN "persist"; 1.89 ELSE 1.90 RETURN NULL; 1.91 END IF; 1.92 END IF; 1.93 - IF "persist"."state" = 'verification' AND "persist"."phase_finished" THEN 1.94 - PERFORM "freeze_after_snapshot"("issue_id_p"); 1.95 - RETURN NULL; 1.96 - END IF; 1.97 IF "persist"."issue_revoked" THEN 1.98 IF "persist"."state" = 'admission' THEN 1.99 "state_v" := 'canceled_revoked_before_accepted'; 1.100 @@ -4342,24 +4343,35 @@ 1.101 "state" = "state_v", 1.102 "closed" = "phase_finished", 1.103 "phase_finished" = NULL 1.104 - WHERE "id" = "issue_row"."id"; 1.105 + WHERE "id" = "issue_id_p"; 1.106 RETURN NULL; 1.107 END IF; 1.108 IF "persist"."state" = 'admission' THEN 1.109 PERFORM issue_admission("issue_id_p"); 1.110 RETURN NULL; 1.111 END IF; 1.112 - IF 1.113 - "persist"."state" = 'voting' AND "persist"."phase_finished" AND 1.114 - coalesce("persist"."closed_voting", FALSE) = FALSE 1.115 - THEN 1.116 - PERFORM "close_voting"("issue_id_p"); 1.117 - "persist"."closed_voting" = TRUE; 1.118 - RETURN "persist"; 1.119 - END IF; 1.120 - IF "persist"."state" = 'voting' AND "persist"."phase_finished" THEN 1.121 - PERFORM "calculate_ranks"("issue_id_p"); 1.122 - RETURN NULL; 1.123 + IF "persist"."phase_finished" THEN 1.124 + if "persist"."state" = 'discussion' THEN 1.125 + UPDATE "issue" SET 1.126 + "state" = 'verification', 1.127 + "half_frozen" = "phase_finished", 1.128 + "phase_finished" = NULL 1.129 + WHERE "id" = "issue_id_p"; 1.130 + RETURN NULL; 1.131 + END IF; 1.132 + IF "persist"."state" = 'verification' THEN 1.133 + PERFORM "freeze_after_snapshot"("issue_id_p"); 1.134 + RETURN NULL; 1.135 + END IF; 1.136 + IF "persist"."state" = 'voting' THEN 1.137 + IF coalesce("persist"."closed_voting", FALSE) = FALSE THEN 1.138 + PERFORM "close_voting"("issue_id_p"); 1.139 + "persist"."closed_voting" = TRUE; 1.140 + RETURN "persist"; 1.141 + END IF; 1.142 + PERFORM "calculate_ranks"("issue_id_p"); 1.143 + RETURN NULL; 1.144 + END IF; 1.145 END IF; 1.146 RAISE WARNING 'should not happen'; 1.147 RETURN NULL;