durable_rules 0.34.03 → 0.34.04
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/src/rules/events.c +0 -1
- data/src/rules/net.c +5 -1
- data/src/rules/state.c +18 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c83fbc15f95b38c2777cd335acae30e82d862919
|
4
|
+
data.tar.gz: c03de9b4e41d27382d1edfe54e7ceb61e9d6c489
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 001c07ac0b59a773a2b90028c2fd62d5e048747075e7ec00f08c8d7b2bd6e44f1d85cc052fb5ca6b64414219a970bdc614e2af704d3c267ff1c14cbb3d7c81b2
|
7
|
+
data.tar.gz: cef74ba36f48e2492177f03dc41adad33482b3ebaa5139f0775f7d800241c06d55f8e827a7c4be38769217567a9d9d77991a8c4376b4ee1dfbd4d7a97f3406d8
|
data/src/rules/events.c
CHANGED
data/src/rules/net.c
CHANGED
@@ -397,7 +397,7 @@ static unsigned int loadTimerCommand(ruleset *tree, binding *rulesBinding) {
|
|
397
397
|
if (asprintf(&lua,
|
398
398
|
"local timer_key = \"%s!t\"\n"
|
399
399
|
"local timestamp = tonumber(ARGV[1])\n"
|
400
|
-
"local res = redis.call(\"zrangebyscore\", timer_key, 0, timestamp, \"limit\", 0,
|
400
|
+
"local res = redis.call(\"zrangebyscore\", timer_key, 0, timestamp, \"limit\", 0, 50)\n"
|
401
401
|
"if #res > 0 then\n"
|
402
402
|
" for i = 0, #res, 1 do\n"
|
403
403
|
" redis.call(\"zincrby\", timer_key, 10, res[i])\n"
|
@@ -1755,6 +1755,10 @@ static unsigned int loadEvalMessageCommand(ruleset *tree, binding *rulesBinding)
|
|
1755
1755
|
" end\n"
|
1756
1756
|
" result = result + count\n"
|
1757
1757
|
" if not is_pure_fact(frame, index) then\n"
|
1758
|
+
// the mid list might not be cleaned up if the first mid is always valid.
|
1759
|
+
" if (#new_mids %% 10) == 0 then\n"
|
1760
|
+
" cleanup = true\n"
|
1761
|
+
" end\n"
|
1758
1762
|
" break\n"
|
1759
1763
|
" end\n"
|
1760
1764
|
" end\n"
|
data/src/rules/state.c
CHANGED
@@ -40,6 +40,10 @@ static unsigned int evictEntry(ruleset *tree) {
|
|
40
40
|
|
41
41
|
free(current->sid);
|
42
42
|
current->sid = NULL;
|
43
|
+
current->sidHash = 0;
|
44
|
+
current->bindingIndex = 0;
|
45
|
+
current->lastRefresh = 0;
|
46
|
+
current->propertiesLength = 0;
|
43
47
|
found = 1;
|
44
48
|
}
|
45
49
|
}
|
@@ -95,6 +99,7 @@ static unsigned char ensureEntry(ruleset *tree, char *sid, unsigned int sidHash,
|
|
95
99
|
unsigned int offset = tree->stateBuckets[bucket];
|
96
100
|
stateEntry *current = NULL;
|
97
101
|
unsigned char found = 0;
|
102
|
+
// find state entry by sid in hash table
|
98
103
|
while (offset != UNDEFINED_HASH_OFFSET) {
|
99
104
|
current = &tree->state[offset];
|
100
105
|
if (current->sidHash == sidHash) {
|
@@ -106,28 +111,38 @@ static unsigned char ensureEntry(ruleset *tree, char *sid, unsigned int sidHash,
|
|
106
111
|
|
107
112
|
offset = current->nextHashOffset;
|
108
113
|
}
|
114
|
+
|
115
|
+
// create entry if not found
|
109
116
|
if (offset == UNDEFINED_HASH_OFFSET) {
|
110
117
|
offset = addEntry(tree, sid, sidHash);
|
111
118
|
current = &tree->state[offset];
|
112
119
|
}
|
113
120
|
|
121
|
+
// remove entry from lru double linked list
|
114
122
|
if (current->prevLruOffset != UNDEFINED_HASH_OFFSET) {
|
115
123
|
tree->state[current->prevLruOffset].nextLruOffset = current->nextLruOffset;
|
124
|
+
if (tree->mruStateOffset == offset) {
|
125
|
+
tree->mruStateOffset = current->prevLruOffset;
|
126
|
+
}
|
116
127
|
}
|
117
128
|
|
118
129
|
if (current->nextLruOffset != UNDEFINED_HASH_OFFSET) {
|
119
130
|
tree->state[current->nextLruOffset].prevLruOffset = current->prevLruOffset;
|
131
|
+
if (tree->lruStateOffset == offset) {
|
132
|
+
tree->lruStateOffset = current->nextLruOffset;
|
133
|
+
}
|
120
134
|
}
|
121
135
|
|
122
|
-
|
136
|
+
// attach entry to end of linked list
|
123
137
|
current->nextLruOffset = UNDEFINED_HASH_OFFSET;
|
138
|
+
current->prevLruOffset = tree->mruStateOffset;
|
124
139
|
if (tree->mruStateOffset == UNDEFINED_HASH_OFFSET) {
|
125
140
|
tree->lruStateOffset = offset;
|
126
141
|
} else {
|
127
142
|
tree->state[tree->mruStateOffset].nextLruOffset = offset;
|
128
143
|
}
|
129
|
-
|
130
144
|
tree->mruStateOffset = offset;
|
145
|
+
|
131
146
|
*result = current;
|
132
147
|
return found;
|
133
148
|
}
|
@@ -317,7 +332,7 @@ static unsigned int resolveBindingAndEntry(ruleset *tree,
|
|
317
332
|
|
318
333
|
unsigned int resolveBinding(void *handle,
|
319
334
|
char *sid,
|
320
|
-
void **rulesBinding) {
|
335
|
+
void **rulesBinding) {
|
321
336
|
stateEntry *entry = NULL;
|
322
337
|
return resolveBindingAndEntry(handle, sid, &entry, rulesBinding);
|
323
338
|
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: durable_rules
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.34.
|
4
|
+
version: 0.34.04
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jesus Ruiz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|