durable_rules 2.0.15 → 2.0.16

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d2b95c8e4b55277ee44b58323b886608f8496795
4
- data.tar.gz: 80c64211b631d8e79f232f582088f6e599217ec0
3
+ metadata.gz: bf45128fee07cc96208c6acf6ad9145efdf26a42
4
+ data.tar.gz: c6ee78e78cc7cf95feb99d325e1afb382a9d49c6
5
5
  SHA512:
6
- metadata.gz: 62f9a2c8f834b30c9ba64390d95612118347efe81172f26f5ae3d74367a66a74208df88f0294812c9896d069f497cb67fcba2890b02e263f0884f269b53bac71
7
- data.tar.gz: e5b051bd03d1e163f02c3e154060bd3787a98e2f5886e034e633e826565bee0d6b2b90d654d805bd6f9f88d19499ca5434301622bdb3e336720c9426d306914f
6
+ metadata.gz: 6f85c1d8a6d9afad3489c151e0af655649c5f5f43c4b33ed7c65e73c1bba31e1a3421bd2a901589c14839fedf80a645f98f07bd2be818be7d1a60f7f6d21aec9
7
+ data.tar.gz: 767a9be4effd44052779b0fd568fa9f70c5c8da482ffb6022c23fcfa497c6a725d5d923ce7a375f78dc121999b93da19fd70d3b2d51084c3fc1fa994c6f0f09e
data/src/rules/events.c CHANGED
@@ -2236,8 +2236,10 @@ unsigned int startActionForState(unsigned int handle,
2236
2236
  unsigned int actionStateIndex;
2237
2237
  unsigned int resultCount;
2238
2238
  unsigned int resultFrameOffset;
2239
+ time_t currentTime = time(NULL);
2239
2240
 
2240
2241
  CHECK_RESULT(getNextResultInState(tree,
2242
+ currentTime,
2241
2243
  resultState,
2242
2244
  &actionStateIndex,
2243
2245
  &resultCount,
@@ -2256,7 +2258,7 @@ unsigned int startActionForState(unsigned int handle,
2256
2258
  resultState->context.actionStateIndex = actionStateIndex;
2257
2259
  resultState->context.resultCount = resultCount;
2258
2260
  resultState->context.resultFrameOffset = resultFrameOffset;
2259
- resultState->lockExpireTime = time(NULL) + STATE_LEASE_TIME;
2261
+ resultState->lockExpireTime = currentTime + STATE_LEASE_TIME;
2260
2262
  *messages = resultState->context.messages;
2261
2263
  *stateFact = resultState->context.stateFact;
2262
2264
 
@@ -2302,6 +2304,7 @@ static unsigned int deleteCurrentAction(ruleset *tree,
2302
2304
 
2303
2305
  mid[midProperty->valueLength] = '\0';
2304
2306
 
2307
+
2305
2308
  CHECK_RESULT(handleDeleteMessage(tree,
2306
2309
  state,
2307
2310
  mid,
@@ -2311,10 +2314,7 @@ static unsigned int deleteCurrentAction(ruleset *tree,
2311
2314
  }
2312
2315
 
2313
2316
  resultFrameOffset = resultFrame->nextOffset;
2314
- unsigned int result = deleteDispatchingActionFrame(state, resultLocation);
2315
- if (result != RULES_OK) {
2316
- return result;
2317
- }
2317
+ CHECK_RESULT(deleteDispatchingActionFrame(state, resultLocation));
2318
2318
  }
2319
2319
 
2320
2320
  return RULES_OK;
@@ -2345,16 +2345,17 @@ unsigned int completeAndStartAction(unsigned int handle,
2345
2345
  resultState->context.actionStateIndex,
2346
2346
  resultState->context.resultCount,
2347
2347
  resultState->context.resultFrameOffset));
2348
-
2349
-
2348
+
2350
2349
  freeActionContext(resultState);
2351
2350
 
2352
2351
  actionStateNode *resultAction;
2353
2352
  unsigned int actionStateIndex;
2354
2353
  unsigned int resultCount;
2355
2354
  unsigned int resultFrameOffset;
2355
+ time_t currentTime = time(NULL);
2356
2356
 
2357
2357
  CHECK_RESULT(getNextResultInState(tree,
2358
+ currentTime,
2358
2359
  resultState,
2359
2360
  &actionStateIndex,
2360
2361
  &resultCount,
@@ -2370,7 +2371,7 @@ unsigned int completeAndStartAction(unsigned int handle,
2370
2371
  resultState->context.actionStateIndex = actionStateIndex;
2371
2372
  resultState->context.resultCount = resultCount;
2372
2373
  resultState->context.resultFrameOffset = resultFrameOffset;
2373
- resultState->lockExpireTime = time(NULL) + STATE_LEASE_TIME;
2374
+ resultState->lockExpireTime = currentTime + STATE_LEASE_TIME;
2374
2375
  *messages = resultState->context.messages;
2375
2376
  return RULES_OK;
2376
2377
  }
data/src/rules/state.c CHANGED
@@ -1126,6 +1126,7 @@ unsigned int serializeState(stateNode *state,
1126
1126
  }
1127
1127
 
1128
1128
  unsigned int getNextResultInState(void *tree,
1129
+ time_t currentTime,
1129
1130
  stateNode *state,
1130
1131
  unsigned int *actionStateIndex,
1131
1132
  unsigned int *resultCount,
@@ -1134,23 +1135,25 @@ unsigned int getNextResultInState(void *tree,
1134
1135
 
1135
1136
  ruleset *rulesetTree = (ruleset*)tree;
1136
1137
  *resultAction = NULL;
1137
- for (unsigned int index = 0; index < rulesetTree->actionCount; ++index) {
1138
- actionStateNode *actionNode = &state->actionState[index];
1139
- if (actionNode->reteNode) {
1140
- if ((actionNode->reteNode->value.c.cap && actionNode->resultPool.count) ||
1141
- (actionNode->reteNode->value.c.count && actionNode->resultPool.count >= actionNode->reteNode->value.c.count)) {
1142
- *resultAction = actionNode;
1143
- *actionStateIndex = index;
1144
- *resultFrameOffset = actionNode->resultIndex[0];
1145
- if (actionNode->reteNode->value.c.count) {
1146
- *resultCount = actionNode->reteNode->value.c.count;
1147
- } else {
1148
- *resultCount = (actionNode->reteNode->value.c.cap > actionNode->resultPool.count ?
1149
- actionNode->resultPool.count :
1150
- actionNode->reteNode->value.c.cap);
1138
+ if (currentTime - state->lockExpireTime > STATE_LEASE_TIME) {
1139
+ for (unsigned int index = 0; index < rulesetTree->actionCount; ++index) {
1140
+ actionStateNode *actionNode = &state->actionState[index];
1141
+ if (actionNode->reteNode) {
1142
+ if ((actionNode->reteNode->value.c.cap && actionNode->resultPool.count) ||
1143
+ (actionNode->reteNode->value.c.count && actionNode->resultPool.count >= actionNode->reteNode->value.c.count)) {
1144
+ *resultAction = actionNode;
1145
+ *actionStateIndex = index;
1146
+ *resultFrameOffset = actionNode->resultIndex[0];
1147
+ if (actionNode->reteNode->value.c.count) {
1148
+ *resultCount = actionNode->reteNode->value.c.count;
1149
+ } else {
1150
+ *resultCount = (actionNode->reteNode->value.c.cap > actionNode->resultPool.count ?
1151
+ actionNode->resultPool.count :
1152
+ actionNode->reteNode->value.c.cap);
1153
+ }
1154
+
1155
+ return RULES_OK;
1151
1156
  }
1152
-
1153
- return RULES_OK;
1154
1157
  }
1155
1158
  }
1156
1159
  }
@@ -1177,18 +1180,18 @@ unsigned int getNextResult(void *tree,
1177
1180
  while (count < rulesetTree->statePool.count && !*resultAction) {
1178
1181
  unsigned int nodeOffset = rulesetTree->reverseStateIndex[rulesetTree->currentStateIndex];
1179
1182
  *resultState = STATE_NODE(tree, nodeOffset);
1180
- if (currentTime - (*resultState)->lockExpireTime > STATE_LEASE_TIME) {
1181
- unsigned int result = getNextResultInState(tree,
1182
- *resultState,
1183
- actionStateIndex,
1184
- resultCount,
1185
- resultFrameOffset,
1186
- resultAction);
1187
- if (result != ERR_NO_ACTION_AVAILABLE) {
1188
- return result;
1189
- }
1183
+
1184
+ unsigned int result = getNextResultInState(tree,
1185
+ currentTime,
1186
+ *resultState,
1187
+ actionStateIndex,
1188
+ resultCount,
1189
+ resultFrameOffset,
1190
+ resultAction);
1191
+ if (result != ERR_NO_ACTION_AVAILABLE) {
1192
+ return result;
1190
1193
  }
1191
-
1194
+
1192
1195
  rulesetTree->currentStateIndex = (rulesetTree->currentStateIndex + 1) % rulesetTree->statePool.count;
1193
1196
  ++count;
1194
1197
  }
data/src/rules/state.h CHANGED
@@ -351,6 +351,7 @@ unsigned int serializeState(stateNode *state,
351
351
  char **stateFact);
352
352
 
353
353
  unsigned int getNextResultInState(void *tree,
354
+ time_t currentTime,
354
355
  stateNode *state,
355
356
  unsigned int *actionStateIndex,
356
357
  unsigned int *resultCount,
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: 2.0.15
4
+ version: 2.0.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jesus Ruiz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-14 00:00:00.000000000 Z
11
+ date: 2019-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake