sort_vector: move dumping size considerations up 21/238621/2
authorMichal Bloch <m.bloch@samsung.com>
Wed, 15 Jul 2020 11:05:31 +0000 (13:05 +0200)
committerMichal Bloch <m.bloch@samsung.com>
Wed, 15 Jul 2020 15:02:45 +0000 (17:02 +0200)
Sort vector now just has the exact size it is told to have.
How dumping affects this value is none of its business and
is now taken care of by the higher layer.

Change-Id: I058a5ec9e412234a1b0b8958f8e9d2bdad5574ec
Signed-off-by: Michal Bloch <m.bloch@samsung.com>
include/sort_vector.h
src/libdlogutil/lib.c
src/libdlogutil/logretrieve.c
src/libdlogutil/sort_vector.c
src/tests/logutil.c
src/tests/logutil_neg.c
src/tests/logutil_pos.c
src/tests/sort_vector_neg.c
src/tests/sort_vector_pos.c

index 4ebfd75..851b52a 100644 (file)
@@ -38,7 +38,7 @@ struct sort_vector {
 };
 
 void sort_vector_init(struct sort_vector *logs);
-int sort_vector_finalize(struct sort_vector *logs, unsigned int dump_size);
+int sort_vector_finalize(struct sort_vector *logs);
 void sort_vector_free(struct sort_vector *logs);
 dlogutil_entry_s *sort_vector_back(struct sort_vector *logs);
 int sort_vector_enlarge(struct sort_vector *logs);
index 40ebfaa..ec6a08a 100644 (file)
@@ -275,7 +275,6 @@ EXPORT_API int dlogutil_config_mode_set_dump(dlogutil_config_s *config, unsigned
        CHECK_PARAM(config);
        if (entry_count == 0)
                return TIZEN_ERROR_INVALID_PARAMETER;
-       static_assert(DLOGUTIL_MODE_CONTINUOUS == 0, "DLOGUTIL_MODE_CONTINUOUS is not 0");
 
        config->mode = DLOGUTIL_MODE_DUMP;
        config->dump_size = entry_count;
index a8065c6..5348d76 100644 (file)
@@ -195,8 +195,12 @@ int dlogutil_state_init(dlogutil_state_s *state, struct fd_info ***data_fds_ptr,
                : 0
        ;
        state->logs.sort_by = sort_by;
+
+       if (config->mode == DLOGUTIL_MODE_DUMP && state->logs_dump != DLOGUTIL_MAX_DUMP_SIZE)
+               state->logs.size = state->logs_dump + 1;
+
        clock_gettime(get_proper_clock(sort_by), &state->logs.start);
-       if (!sort_vector_finalize(&state->logs, state->logs_dump))
+       if (!sort_vector_finalize(&state->logs))
                return -ENOMEM;
 
        state->enabled = calloc(fd_count, sizeof *state->enabled);
index 69329f3..9a723b5 100644 (file)
@@ -43,13 +43,10 @@ void sort_vector_init(struct sort_vector *logs)
        logs->old_logs_dumped = 0;
 }
 
-int sort_vector_finalize(struct sort_vector *logs, unsigned int dump_size)
+int sort_vector_finalize(struct sort_vector *logs)
 {
        assert(logs);
 
-       if (dump_size != DLOGUTIL_MAX_DUMP_SIZE && dump_size != DLOGUTIL_MODE_CONTINUOUS)
-               logs->size = dump_size + 1; // +1 so that `-t 1` works (buffer must have capacity at least 2)
-
        logs->size = clamp_int(logs->size, 0, MAX_SORT_BUFFER_SIZE);
        logs->timeout = clamp_int(logs->timeout, 0, MAX_SORT_TIMEOUT);
 
index 1dd4614..b92d017 100644 (file)
@@ -88,7 +88,7 @@ int main()
        sv.sort_by = DLOGUTIL_SORT_SENT_MONO;
        sv.timeout = 60;
        sv.size = DEFAULT_SORT_BUFFER_SIZE;
-       sort_vector_finalize(&sv, 0);
+       sort_vector_finalize(&sv);
        assert(sort_vector_time_span(&sv) == 0);
 
        for (int i = 0; i < 10; ++i) {
index 1f0d362..90b9114 100644 (file)
@@ -23,7 +23,7 @@ int main()
        sv.sort_by = DLOGUTIL_SORT_SENT_MONO;
        sv.timeout = 60;
        sv.size = DEFAULT_SORT_BUFFER_SIZE;
-       sort_vector_finalize(&sv, 0);
+       sort_vector_finalize(&sv);
        assert(sort_vector_time_span(&sv) == 0);
 
        struct fd_ops test_ops = {
index ac12e96..72315a8 100644 (file)
@@ -39,7 +39,7 @@ int main()
        sv.sort_by = DLOGUTIL_SORT_SENT_MONO;
        sv.timeout = 60;
        sv.size = DEFAULT_SORT_BUFFER_SIZE;
-       sort_vector_finalize(&sv, 0);
+       sort_vector_finalize(&sv);
        assert(sort_vector_time_span(&sv) == 0);
 
        for (int i = 0; i < 10; ++i) {
index 8a01acc..0e57c41 100644 (file)
@@ -41,7 +41,7 @@ void fail_calloc_test()
        sv.size = 99;
 
        fail_calloc = true;
-       assert(sort_vector_finalize(&sv, 6) == 0);
+       assert(sort_vector_finalize(&sv) == 0);
        fail_calloc = false;
 }
 
@@ -53,14 +53,14 @@ void empty_timestamp()
        struct log_config conf = { .begin = NULL, .last = NULL};
        sort_vector_apply_config(&sv, &conf);
 
-       sv.size = 99;
+       sv.size = 2;
        sv.sort_by = DLOGUTIL_SORT_SENT_MONO;
 
        dlogutil_entry_s log;
        log.sec_sent_mono = 0;
        log.nsec_sent_mono = -1;
 
-       sort_vector_finalize(&sv, 6);
+       sort_vector_finalize(&sv);
        sort_vector_push(&sv, &log);
        assert(sort_vector_time_span(&sv) == -1);
 }
@@ -73,7 +73,7 @@ void logs_order_empty()
        struct log_config conf = { .begin = NULL, .last = NULL};
        sort_vector_apply_config(&sv, &conf);
 
-       sv.size = 10;
+       sv.size = 4;
        sv.sort_by = DLOGUTIL_SORT_SENT_MONO;
 
        dlogutil_entry_s log_A = {
@@ -90,7 +90,7 @@ void logs_order_empty()
                .pid = 789,
        };
 
-       sort_vector_finalize(&sv, 6);
+       sort_vector_finalize(&sv);
        sort_vector_push(&sv, &log_A);
        sort_vector_push(&sv, &log_B);
        sort_vector_push(&sv, &log_C);
@@ -116,7 +116,7 @@ void logs_order_mix()
        struct log_config conf = { .begin = NULL, .last = NULL};
        sort_vector_apply_config(&sv, &conf);
 
-       sv.size = 10;
+       sv.size = 5;
        sv.sort_by = DLOGUTIL_SORT_SENT_MONO;
 
        dlogutil_entry_s log_A = {
@@ -137,7 +137,7 @@ void logs_order_mix()
                .pid = 848,
        };
 
-       sort_vector_finalize(&sv, 6);
+       sort_vector_finalize(&sv);
        sort_vector_push(&sv, &log_A);
        sort_vector_push(&sv, &log_B);
        sort_vector_push(&sv, &log_C);
index 9199f13..d5441fa 100644 (file)
@@ -86,25 +86,14 @@ void complex_test()
 
        sort_vector_apply_config(&sv, (struct log_config *) 0xC0B0L);
 
-       // size == 0 and no dumping shouldn't allocate any buffer at all
+       // size == 0 shouldn't allocate any buffer at all
        sv.size = 0;
-       sort_vector_finalize(&sv, 0);
+       sort_vector_finalize(&sv);
        assert(!sv.data);
        assert(!sv.size);
 
-       /* the buffer should be just large enough to fit the dumpees,
-        * i.e. #dumpees + 1 extra slot for operations, regardless of
-        * how large the requested size was */
-       sv.size = 99;
-       sort_vector_finalize(&sv, 6);
-       assert(sv.size == 7);
-       assert(sv.data);
-
-       free(sv.data);
-       sv.data = NULL;
-       sv.size = 3;
-       sort_vector_finalize(&sv, 6);
-       assert(sv.size == 7);
+       sv.size = 7;
+       sort_vector_finalize(&sv);
        assert(sv.data);
 
        // sorting correctness checks
@@ -222,7 +211,7 @@ void time_span_test(int32_t fir, time_t sec, long time_span)
        nseconds = 0;
        sort_vector_apply_config(&sv, &conf);
 
-       sv.size = 10;
+       sv.size = 2;
        sv.sort_by = DLOGUTIL_SORT_SENT_MONO;
 
        dlogutil_entry_s log_A = {
@@ -230,7 +219,7 @@ void time_span_test(int32_t fir, time_t sec, long time_span)
                .nsec_sent_mono = 0,
        };
 
-       sort_vector_finalize(&sv, 6);
+       sort_vector_finalize(&sv);
        sort_vector_push(&sv, &log_A);
        assert((unsigned long) (sort_vector_time_span(&sv)) == time_span);
 }