Added shard_duration as list series property
authorJeroen van der Heijden <jeroen@transceptor.technology>
Thu, 17 Sep 2020 11:20:01 +0000 (13:20 +0200)
committerJeroen van der Heijden <jeroen@transceptor.technology>
Thu, 17 Sep 2020 11:20:01 +0000 (13:20 +0200)
grammar/grammar.py
include/siri/grammar/grammar.h
include/siri/version.h
itest/run_all.py
src/siri/db/listener.c
src/siri/db/series.c
src/siri/grammar/grammar.c

index 11eef64f8e6d5b2292b4cbb316d325ff55978bef..d03c8da5c6091a042c6a878821cce62ebe4b4f28 100644 (file)
@@ -74,6 +74,8 @@ class SiriGrammar(Grammar):
     k_duration_num = Keyword('duration_num')
     k_end = Keyword('end')
     k_error = Keyword('error')
+    k_expiration_log = Keyword('expiration_log')
+    k_expiration_num = Keyword('expiration_num')
     k_expression = Keyword('expression')
     k_false = Keyword('false')
     k_fifo_files = Keyword('fifo_files')
@@ -144,8 +146,7 @@ class SiriGrammar(Grammar):
     k_server = Keyword('server')
     k_servers = Keyword('servers')
     k_set = Keyword('set')
-    k_expiration_log = Keyword('expiration_log')
-    k_expiration_num = Keyword('expiration_num')
+    k_shard_duration = Keyword('shard_duration')
     k_shards = Keyword('shards')
     k_show = Keyword('show')
     k_sid = Keyword('sid')
@@ -241,6 +242,7 @@ class SiriGrammar(Grammar):
         k_length,
         k_start,
         k_end,
+        k_shard_duration,
         k_pool,
         most_greedy=False), ',', 1)
 
@@ -350,7 +352,7 @@ class SiriGrammar(Grammar):
             int_expr),
         Sequence(k_name, str_operator, string),
         Sequence(
-            Choice(k_start, k_end, most_greedy=False),
+            Choice(k_start, k_end, k_shard_duration, most_greedy=False),
             int_operator,
             time_expr),
         Sequence(
index ee629c9a4066e564cdd231164fc74d9ce2b1e67d..d52177cc975b76468d766b3a4fc4c37afb25d221 100644 (file)
@@ -5,7 +5,7 @@
  * should be used with the libcleri module.
  *
  * Source class: SiriGrammar
- * Created at: 2020-09-15 15:01:47
+ * Created at: 2020-09-17 11:38:57
  */
 #ifndef CLERI_EXPORT_SIRI_GRAMMAR_GRAMMAR_H_
 #define CLERI_EXPORT_SIRI_GRAMMAR_GRAMMAR_H_
@@ -220,6 +220,7 @@ enum cleri_grammar_ids {
     CLERI_GID_K_SERVERS,
     CLERI_GID_K_SET,
     CLERI_GID_K_SHARDS,
+    CLERI_GID_K_SHARD_DURATION,
     CLERI_GID_K_SHOW,
     CLERI_GID_K_SID,
     CLERI_GID_K_SIZE,
index 95c227fc874d31ed4d71fa5336d462977bcb43ac..564fd702abaf64a221f67d8787de5cee6bb17a98 100644 (file)
@@ -15,7 +15,7 @@
  * Note that debian alpha packages should use versions like this:
  *   2.0.34-0alpha0
  */
-#define SIRIDB_VERSION_PRE_RELEASE "-alpha-2"
+#define SIRIDB_VERSION_PRE_RELEASE "-alpha-3"
 
 #ifndef NDEBUG
 #define SIRIDB_VERSION_BUILD_RELEASE "+debug"
index 3751587656997dc6c12436b295df78a13555e45d..bbbd97705f6039f3a374613c406ee3b9f2016aa6 100644 (file)
@@ -2,6 +2,7 @@
 from testing import run_test
 from testing import Server
 from testing import parse_args
+from test_auto_duration import TestAutoDuration
 from test_buffer import TestBuffer
 from test_cluster import TestCluster
 from test_compression import TestCompression
@@ -27,6 +28,7 @@ from test_user import TestUser
 
 if __name__ == '__main__':
     parse_args()
+    run_test(TestAutoDuration())
     run_test(TestBuffer())
     run_test(TestCompression())
     run_test(TestCreateDatabase())
index dbbdd4e4f455cc9729b5c56106cb60f70a96699b..b25cbaf78894648e5e261888cbecd18115c6fa73 100644 (file)
@@ -5312,6 +5312,10 @@ static void async_list_series(uv_async_t * handle)
                 case CLERI_GID_K_POOL:
                     qp_add_int64(query->packer, (int64_t) series->pool);
                     break;
+                case CLERI_GID_K_SHARD_DURATION:
+                    qp_add_int64(query->packer, (int64_t) (series->idx
+                            ? series->idx->shard->duration : 0));
+                    break;
                 case CLERI_GID_K_START:
                     qp_add_int64(query->packer, (int64_t) series->start);
                     break;
index 5dde94765c196d36d33a37d253e68e81e0a20655..d659347228f9236a5e3da6655f157427e6a1c4db 100644 (file)
@@ -83,7 +83,7 @@ const uint8_t SERIES_SFC =
  */
 int siridb_series_cexpr_cb(siridb_series_t * series, cexpr_condition_t * cond)
 {
-    switch (cond->prop)
+    switch ((enum cleri_grammar_ids) cond->prop)
     {
     case CLERI_GID_K_LENGTH:
         return cexpr_int_cmp(cond->operator, series->length, cond->int64);
@@ -93,14 +93,20 @@ int siridb_series_cexpr_cb(siridb_series_t * series, cexpr_condition_t * cond)
         return cexpr_int_cmp(cond->operator, series->end, cond->int64);
     case CLERI_GID_K_POOL:
         return cexpr_int_cmp(cond->operator, series->pool, cond->int64);
+    case CLERI_GID_K_SHARD_DURATION:
+        return cexpr_int_cmp(
+                cond->operator,
+                (series->idx ? series->idx->shard->duration : 0),
+                cond->int64);
     case CLERI_GID_K_TYPE:
         return cexpr_int_cmp(cond->operator, series->tp, cond->int64);
     case CLERI_GID_K_NAME:
         return cexpr_str_cmp(cond->operator, series->name, cond->str);
+    default:
+        /* we must NEVER get here */
+        log_critical("Unexpected series property received: %d", cond->prop);
+        assert (0);
     }
-    /* we must NEVER get here */
-    log_critical("Unexpected series property received: %d", cond->prop);
-    assert (0);
     return -1;
 }
 
index 91b5ead7c3cc4a31dc813fd1aa7a5901b2dc3f49..90d57f09a106c03633329bdb6a871c791ec7b406 100644 (file)
@@ -5,7 +5,7 @@
  * should be used with the libcleri module.
  *
  * Source class: SiriGrammar
- * Created at: 2020-09-15 15:01:47
+ * Created at: 2020-09-17 11:38:57
  */
 
 #include "siri/grammar/grammar.h"
@@ -58,6 +58,8 @@ cleri_grammar_t * compile_siri_grammar_grammar(void)
     cleri_t * k_duration_num = cleri_keyword(CLERI_GID_K_DURATION_NUM, "duration_num", CLERI_CASE_SENSITIVE);
     cleri_t * k_end = cleri_keyword(CLERI_GID_K_END, "end", CLERI_CASE_SENSITIVE);
     cleri_t * k_error = cleri_keyword(CLERI_GID_K_ERROR, "error", 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_expression = cleri_keyword(CLERI_GID_K_EXPRESSION, "expression", CLERI_CASE_SENSITIVE);
     cleri_t * k_false = cleri_keyword(CLERI_GID_K_FALSE, "false", CLERI_CASE_SENSITIVE);
     cleri_t * k_fifo_files = cleri_keyword(CLERI_GID_K_FIFO_FILES, "fifo_files", CLERI_CASE_SENSITIVE);
@@ -142,8 +144,7 @@ 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_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_shard_duration = cleri_keyword(CLERI_GID_K_SHARD_DURATION, "shard_duration", 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);
@@ -286,12 +287,13 @@ cleri_grammar_t * compile_siri_grammar_grammar(void)
     cleri_t * series_columns = cleri_list(CLERI_GID_SERIES_COLUMNS, cleri_choice(
         CLERI_NONE,
         CLERI_FIRST_MATCH,
-        6,
+        7,
         k_name,
         k_type,
         k_length,
         k_start,
         k_end,
+        k_shard_duration,
         k_pool
     ), cleri_token(CLERI_NONE, ","), 1, 0, 0);
     cleri_t * shard_columns = cleri_list(CLERI_GID_SHARD_COLUMNS, cleri_choice(
@@ -539,9 +541,10 @@ cleri_grammar_t * compile_siri_grammar_grammar(void)
                 cleri_choice(
                     CLERI_NONE,
                     CLERI_FIRST_MATCH,
-                    2,
+                    3,
                     k_start,
-                    k_end
+                    k_end,
+                    k_shard_duration
                 ),
                 int_operator,
                 time_expr