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;

Impressum / About Us