Work on shard
authorJeroen van der Heijden <jeroen@transceptor.technology>
Tue, 21 Jan 2020 19:43:28 +0000 (20:43 +0100)
committerJeroen van der Heijden <jeroen@transceptor.technology>
Tue, 21 Jan 2020 19:43:28 +0000 (20:43 +0100)
grammar/export_grammar.py
include/siri/db/db.h
include/siri/grammar/grammar.h
src/siri/db/shards.c
src/siri/grammar/grammar.c
src/siri/heartbeat.c

index f0b1bf84ba09e1d1e303133dcf4c5a6b624baa71..c844ddcda406ce69bb4bd8dee6ba64c6a8e2c4ab 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/python3
+#!/usr/bin/env python
 '''Export python grammar to C grammar files
 
 Author: Jeroen van der Heijden (Transceptor Technology)
index 2c0457842f5d864a2f5f93c01e8d5e281ac9dc80..961338d16ed4a91e15d60451872770107fd34c11 100644 (file)
@@ -73,8 +73,8 @@ struct siridb_s
     struct timespec start_time;     /* to calculate up-time.                */
     uint64_t duration_num;          /* number duration in s, ms, us or ns   */
     uint64_t duration_log;          /* log duration in s, ms, us or ns      */
-    uint64_t expire_at_num;         /* UNIX time stamp in s, ms, us or ns   */
-    uint64_t expire_at_log;         /* UNIX time stamp in s, ms, us or ns   */
+    uint64_t exp_at_num;            /* UNIX time stamp in s, ms, us or ns   */
+    uint64_t exp_at_log;            /* UNIX time stamp in s, ms, us or ns   */
     uint64_t expiration_num;        /* number duration in s, ms, us or ns   */
     uint64_t expiration_log;        /* log duration in s, ms, us or ns      */
     char * dbname;
index 3f41f461471b1904359f0a770086ccd4d2ac7e89..83ea352ab2cd59e36710277ada8417ad76186b7f 100644 (file)
@@ -5,7 +5,7 @@
  * should be used with the libcleri module.
  *
  * Source class: SiriGrammar
- * Created at: 2019-03-06 11:59:02
+ * Created at: 2020-01-21 16:05:35
  */
 #ifndef CLERI_EXPORT_SIRI_GRAMMAR_GRAMMAR_H_
 #define CLERI_EXPORT_SIRI_GRAMMAR_GRAMMAR_H_
@@ -145,6 +145,8 @@ enum cleri_grammar_ids {
     CLERI_GID_K_DURATION_NUM,
     CLERI_GID_K_END,
     CLERI_GID_K_ERROR,
+    CLERI_GID_K_EXPIRATION_LOG,
+    CLERI_GID_K_EXPIRATION_NUM,
     CLERI_GID_K_EXPRESSION,
     CLERI_GID_K_FALSE,
     CLERI_GID_K_FIFO_FILES,
@@ -282,6 +284,8 @@ enum cleri_grammar_ids {
     CLERI_GID_SET_ADDRESS,
     CLERI_GID_SET_BACKUP_MODE,
     CLERI_GID_SET_DROP_THRESHOLD,
+    CLERI_GID_SET_EXPIRATION_LOG,
+    CLERI_GID_SET_EXPIRATION_NUM,
     CLERI_GID_SET_EXPRESSION,
     CLERI_GID_SET_IGNORE_THRESHOLD,
     CLERI_GID_SET_LIST_LIMIT,
index 83b5111fd19e0727ec72be69face55a79289ac5f..a2c1f4bd1b8964697d2f1a4a71c2e143233c06d6 100644 (file)
@@ -127,7 +127,7 @@ int siridb_shards_add_points(
     _Bool is_num = siridb_series_isnum(series);
     siridb_shard_t * shard;
     uint64_t duration = is_num ? siridb->duration_num : siridb->duration_log;
-    uint64_t expire = is_num ? siridb->expire_num : siridb->expire_log;
+    uint64_t expire_at = is_num ? siridb->exp_at_num : siridb->exp_at_log;
     uint64_t shard_start, shard_end, shard_id;
     uint_fast32_t start, end, num_chunks, pstart, pend;
     uint16_t chunk_sz;
@@ -144,7 +144,7 @@ int siridb_shards_add_points(
                 end < points->len && points->data[end].ts < shard_end;
                 end++);
 
-        if (shard_end < expire)
+        if (shard_end < expire_at)
             continue;
 
         if ((shard = imap_get(siridb->shards, shard_id)) == NULL)
index 6ed2519f0117daabc5cb8d2887ff217318ea67e7..12d90266a778b66d3d07b369cbe19687e07854f8 100644 (file)
@@ -5,7 +5,7 @@
  * should be used with the libcleri module.
  *
  * Source class: SiriGrammar
- * Created at: 2019-03-06 11:59:02
+ * Created at: 2020-01-21 16:05:35
  */
 
 #include "siri/grammar/grammar.h"
@@ -104,14 +104,14 @@ cleri_grammar_t * compile_siri_grammar_grammar(void)
     cleri_t * k_max_open_files = cleri_keyword(CLERI_GID_K_MAX_OPEN_FILES, "max_open_files", CLERI_CASE_SENSITIVE);
     cleri_t * k_mean = cleri_keyword(CLERI_GID_K_MEAN, "mean", CLERI_CASE_SENSITIVE);
     cleri_t * k_median = cleri_keyword(CLERI_GID_K_MEDIAN, "median", CLERI_CASE_SENSITIVE);
-    cleri_t * k_median_low = cleri_keyword(CLERI_GID_K_MEDIAN_LOW, "median_low", CLERI_CASE_SENSITIVE);
     cleri_t * k_median_high = cleri_keyword(CLERI_GID_K_MEDIAN_HIGH, "median_high", CLERI_CASE_SENSITIVE);
+    cleri_t * k_median_low = cleri_keyword(CLERI_GID_K_MEDIAN_LOW, "median_low", CLERI_CASE_SENSITIVE);
     cleri_t * k_mem_usage = cleri_keyword(CLERI_GID_K_MEM_USAGE, "mem_usage", CLERI_CASE_SENSITIVE);
     cleri_t * k_merge = cleri_keyword(CLERI_GID_K_MERGE, "merge", CLERI_CASE_SENSITIVE);
     cleri_t * k_min = cleri_keyword(CLERI_GID_K_MIN, "min", CLERI_CASE_SENSITIVE);
     cleri_t * k_modify = cleri_keyword(CLERI_GID_K_MODIFY, "modify", CLERI_CASE_SENSITIVE);
-    cleri_t * k_nan = cleri_keyword(CLERI_GID_K_NAN, "nan", CLERI_CASE_SENSITIVE);
     cleri_t * k_name = cleri_keyword(CLERI_GID_K_NAME, "name", CLERI_CASE_SENSITIVE);
+    cleri_t * k_nan = cleri_keyword(CLERI_GID_K_NAN, "nan", CLERI_CASE_SENSITIVE);
     cleri_t * k_ninf = cleri_sequence(
         CLERI_GID_K_NINF,
         2,
@@ -141,9 +141,11 @@ cleri_grammar_t * compile_siri_grammar_grammar(void)
     cleri_t * k_server = cleri_keyword(CLERI_GID_K_SERVER, "server", CLERI_CASE_SENSITIVE);
     cleri_t * k_servers = cleri_keyword(CLERI_GID_K_SERVERS, "servers", CLERI_CASE_SENSITIVE);
     cleri_t * k_set = cleri_keyword(CLERI_GID_K_SET, "set", CLERI_CASE_SENSITIVE);
-    cleri_t * k_sid = cleri_keyword(CLERI_GID_K_SID, "sid", CLERI_CASE_SENSITIVE);
+    cleri_t * k_expiration_log = cleri_keyword(CLERI_GID_K_EXPIRATION_LOG, "expiration_log", CLERI_CASE_SENSITIVE);
+    cleri_t * k_expiration_num = cleri_keyword(CLERI_GID_K_EXPIRATION_NUM, "expiration_num", CLERI_CASE_SENSITIVE);
     cleri_t * k_shards = cleri_keyword(CLERI_GID_K_SHARDS, "shards", CLERI_CASE_SENSITIVE);
     cleri_t * k_show = cleri_keyword(CLERI_GID_K_SHOW, "show", CLERI_CASE_SENSITIVE);
+    cleri_t * k_sid = cleri_keyword(CLERI_GID_K_SID, "sid", CLERI_CASE_SENSITIVE);
     cleri_t * k_size = cleri_keyword(CLERI_GID_K_SIZE, "size", CLERI_CASE_SENSITIVE);
     cleri_t * k_start = cleri_keyword(CLERI_GID_K_START, "start", CLERI_CASE_SENSITIVE);
     cleri_t * k_startup_time = cleri_keyword(CLERI_GID_K_STARTUP_TIME, "startup_time", CLERI_CASE_SENSITIVE);
@@ -1165,6 +1167,33 @@ cleri_grammar_t * compile_siri_grammar_grammar(void)
         k_timezone,
         string
     );
+    cleri_t * set_expiration_num = cleri_sequence(
+        CLERI_GID_SET_EXPIRATION_NUM,
+        4,
+        k_set,
+        k_expiration_num,
+        cleri_choice(
+            CLERI_NONE,
+            CLERI_FIRST_MATCH,
+            2,
+            k_false,
+            time_expr
+        ),
+        cleri_optional(CLERI_NONE, set_ignore_threshold)
+    );
+    cleri_t * set_expiration_log = cleri_sequence(
+        CLERI_GID_SET_EXPIRATION_LOG,
+        3,
+        k_set,
+        k_expiration_log,
+        cleri_choice(
+            CLERI_NONE,
+            CLERI_FIRST_MATCH,
+            2,
+            k_false,
+            time_expr
+        )
+    );
     cleri_t * alter_database = cleri_sequence(
         CLERI_GID_ALTER_DATABASE,
         2,
@@ -1172,11 +1201,13 @@ cleri_grammar_t * compile_siri_grammar_grammar(void)
         cleri_choice(
             CLERI_NONE,
             CLERI_FIRST_MATCH,
-            4,
+            6,
             set_drop_threshold,
             set_list_limit,
             set_select_points_limit,
-            set_timezone
+            set_timezone,
+            set_expiration_num,
+            set_expiration_log
         )
     );
     cleri_t * alter_group = cleri_sequence(
index b1ec11a14fba957b57ba315a86c8989cc55837f7..c8e58cb45ea8e3eb27dc9fba1249956e05f1d914 100644 (file)
@@ -64,11 +64,11 @@ static void HEARTBEAT_cb(uv_timer_t * handle __attribute__((unused)))
     {
         siridb = (siridb_t *) siridb_node->data;
 
-        siridb->expire_at_num = siridb->expiration_num
+        siridb->exp_at_num = siridb->expiration_num
                 ? siridb_time_now(siridb, now) - siridb->expiration_num
                 : 0;
 
-        siridb->expire_at_log = siridb->expiration_log
+        siridb->exp_at_log = siridb->expiration_log
                 ? siridb_time_now(siridb, now) - siridb->expiration_log
                 : 0;