Browse Source

fix FDB_ALIGN on 64bit platoform

lyon1998 1 year ago
parent
commit
a241e7b230

+ 5 - 1
examples/flashdb/flashdb_tsdb1.py

@@ -7,11 +7,13 @@ DB_PATH = "test/out/fdb_tsdb"
 
 tsdb = flashdb.TSDB("env", DB_PATH, max_len=512)
 
-for i in range(100):
+tic = time.time() * 1000
+for i in range(10):
     blob_i = struct.pack('i', i)
     time.sleep(0.001)
     ret = tsdb.tsl_append(blob_i)
 
+toc = time.time() * 1000
 assert ret == 0
 
 
@@ -25,5 +27,7 @@ def callback(tsl, user_data) -> int:
 
 
 assert tsdb.tsl_iter(callback, 'user_data') == 0
+assert tsdb.tsl_iter_reverse(callback, 'user_data_reverse') == 0
+assert tsdb.tsl_iter_by_time(tic, toc, callback, 'user_data_by_time') == 0
 
 print('PASS')

+ 3 - 0
package/flashdb/_flashdb.pyi

@@ -42,6 +42,9 @@ class TSDB:
 
     def tsl_append(self, blob: any) -> int: ...
     def tsl_iter(self, callback: any, user_data: any) -> int: ...
+    def tsl_iter_reverse(self, callback: any, user_data: any) -> int: ...
+    def tsl_iter_by_time(self, from_time: int64, to_time: int64,
+                         callback: any, user_data: any) -> int: ...
 
 
 class TSL:

+ 35 - 2
package/flashdb/_flashdb_TSDB.c

@@ -35,7 +35,7 @@ static void unlock(fdb_db_t db)
 }
 */
 static fdb_time_t get_time(void) {
-    // ms to s
+    // ns to ms
     return pika_platform_get_tick() / 1000;
 }
 #endif
@@ -242,14 +242,47 @@ pika_bool _flashdb_TSL_iter_callback(fdb_tsl_t tsl, void* arg) {
     return res;
 }
 
+static int _TSDB_iter(PikaObj* self,
+                      Arg* callback,
+                      Arg* user_data,
+                      pika_bool is_reverse) {
+    fdb_tsdb_t tsdb = _OBJ2TSDB(self);
+    tsdb_foreach_context context = {
+        .callback = callback,
+        .user_data = user_data,
+        .tsdb = tsdb,
+    };
+    if (is_reverse) {
+        fdb_tsl_iter_reverse(tsdb, _flashdb_TSL_iter_callback, &context);
+    } else {
+        fdb_tsl_iter(tsdb, _flashdb_TSL_iter_callback, &context);
+    }
+    return 0;
+}
+
 int _flashdb_TSDB_tsl_iter(PikaObj* self, Arg* callback, Arg* user_data) {
+    return _TSDB_iter(self, callback, user_data, pika_false);
+}
+
+int _flashdb_TSDB_tsl_iter_reverse(PikaObj* self,
+                                   Arg* callback,
+                                   Arg* user_data) {
+    return _TSDB_iter(self, callback, user_data, pika_true);
+}
+
+int _flashdb_TSDB_tsl_iter_by_time(PikaObj* self,
+                                   int64_t from_time,
+                                   int64_t to_time,
+                                   Arg* callback,
+                                   Arg* user_data) {
     fdb_tsdb_t tsdb = _OBJ2TSDB(self);
     tsdb_foreach_context context = {
         .callback = callback,
         .user_data = user_data,
         .tsdb = tsdb,
     };
-    fdb_tsl_iter(tsdb, _flashdb_TSL_iter_callback, &context);
+    fdb_tsl_iter_by_time(tsdb, from_time, to_time, _flashdb_TSL_iter_callback,
+                         &context);
     return 0;
 }
 

+ 2 - 1
package/flashdb/fdb_low_lvl.h

@@ -31,9 +31,10 @@
 /* Return the most contiguous size aligned at specified width. RT_ALIGN(13, 4)
  * would return 16.
  */
-#define FDB_ALIGN(size, align) (((size) + (align)-1) & ~((align)-1))
+
 /* align by write granularity */
 #define FDB_WG_ALIGN(size) (FDB_ALIGN(size, (FDB_WRITE_GRAN + 7) / 8))
+#define FDB_ALIGN align_by  // fix ALIGN issue on 64bit platform
 /**
  * Return the down number of aligned at specified width. RT_ALIGN_DOWN(13, 4)
  * would return 12.

+ 1 - 1
package/flashdb/fdb_tsdb.c

@@ -15,8 +15,8 @@
 
 #include <inttypes.h>
 #include <string.h>
-#include "flashdb.h"
 #include "fdb_low_lvl.h"
+#include "flashdb.h"
 
 #define FDB_LOG_TAG "[tsl]"
 /* rewrite log prefix */

+ 7 - 0
package/flashdb/flashdb.py

@@ -36,6 +36,13 @@ class TSDB(_flashdb.TSDB):
                  user_data=None):
         super().__init__(name, path, max_len, user_data)
 
+    def tsl_iter_by_time(self, from_time, to_time,
+                         callback: any, user_data: any) -> int:
+        print('tsl_iter_by_time')
+        print('from_time:', from_time)
+        print('to_time:', to_time)
+        return super().tsl_iter_by_time(from_time, to_time, callback, user_data)
+
 
 class TSL(_flashdb.TSL):
     pass

+ 2 - 1
port/linux/.vscode/settings.json

@@ -125,7 +125,8 @@
         "_fuzzypid_rulebase.h": "c",
         "fuzzy_pid.h": "c",
         "_fuzzypid_piddirect.h": "c",
-        "pika_lvgl_lv_event.h": "c"
+        "pika_lvgl_lv_event.h": "c",
+        "fdb_cfg.h": "c"
     },
     "python.formatting.provider": "none",
     "clangd.arguments": [

+ 2 - 1
port/linux/package/pikascript/pikascript-lib/flashdb/fdb_low_lvl.h

@@ -31,9 +31,10 @@
 /* Return the most contiguous size aligned at specified width. RT_ALIGN(13, 4)
  * would return 16.
  */
-#define FDB_ALIGN(size, align) (((size) + (align)-1) & ~((align)-1))
+
 /* align by write granularity */
 #define FDB_WG_ALIGN(size) (FDB_ALIGN(size, (FDB_WRITE_GRAN + 7) / 8))
+#define FDB_ALIGN align_by  // fix ALIGN issue on 64bit platform
 /**
  * Return the down number of aligned at specified width. RT_ALIGN_DOWN(13, 4)
  * would return 12.

+ 1 - 2
port/linux/package/pikascript/pikascript-lib/flashdb/fdb_tsdb.c

@@ -15,8 +15,8 @@
 
 #include <inttypes.h>
 #include <string.h>
-#include "flashdb.h"
 #include "fdb_low_lvl.h"
+#include "flashdb.h"
 
 #define FDB_LOG_TAG "[tsl]"
 /* rewrite log prefix */
@@ -622,7 +622,6 @@ static int search_start_tsl_addr(fdb_tsdb_t db,
                                  fdb_time_t to) {
     struct fdb_tsl tsl;
     while (pika_true) {
-        size_t align = LOG_IDX_DATA_SIZE;
         tsl.addr.index =
             start + FDB_ALIGN((end - start) / 2, LOG_IDX_DATA_SIZE);
         read_tsl(db, &tsl);

+ 1 - 1
src/PikaVersion.h

@@ -2,4 +2,4 @@
 #define PIKA_VERSION_MINOR 13
 #define PIKA_VERSION_MICRO 3
 
-#define PIKA_EDIT_TIME "2024/07/02 19:47:25"
+#define PIKA_EDIT_TIME "2024/07/03 00:31:02"

+ 2 - 2
src/dataMemory.h

@@ -68,8 +68,8 @@ struct Pool{
 };
 /* clang-format on */
 
-#define align_by(size, aline) \
-    (((size) == 0) ? 0 : (((size)-1) / (aline) + 1) * (aline))
+#define align_by(size, align) \
+    (((size) == 0) ? 0 : (((size)-1) / (align) + 1) * (align))
 
 void pikaFree(void* mem, uint32_t size);
 void* pikaMalloc(uint32_t size);