Remove log storage peeking 49/295949/3
authorMichal Bloch <m.bloch@samsung.com>
Mon, 17 Jul 2023 15:10:22 +0000 (17:10 +0200)
committerMichal Bloch <m.bloch@samsung.com>
Wed, 9 Aug 2023 13:57:37 +0000 (15:57 +0200)
Not thread safe, won't be used with threads.

Change-Id: I4c546d8e3479b7498c9ed2def85b7f710672b764

Makefile.am
src/logger/log_storage.c
src/logger/log_storage.h
src/logger/reader_pipe.c
src/logger/reader_pipe.h
src/tests/test_log_storage_peek.c [deleted file]

index ec72bba..afeba29 100644 (file)
@@ -490,7 +490,6 @@ check_PROGRAMS = \
        src/tests/test_fastlz_neg \
        src/tests/fuzz_logprint \
        src/tests/test_libdlog_container_warning \
-       src/tests/test_log_storage_peek \
        src/tests/test_logger_log_storage \
        src/tests/test_logger_compressed_storage \
        src/tests/test_ptrs_list_pos \
@@ -571,10 +570,6 @@ src_tests_test_logger_log_storage_SOURCES = src/tests/test_logger_log_storage.c
 src_tests_test_logger_log_storage_CFLAGS = $(check_CFLAGS)
 src_tests_test_logger_log_storage_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=malloc
 
-src_tests_test_log_storage_peek_SOURCES = src/tests/test_log_storage_peek.c src/logger/log_storage.c src/shared/ptrs_list.c src/shared/queued_entry_timestamp.c
-src_tests_test_log_storage_peek_CFLAGS = $(check_CFLAGS)
-src_tests_test_log_storage_peek_LDFLAGS = $(AM_LDFLAGS)
-
 src_tests_test_logger_compressed_storage_SOURCES = src/tests/test_logger_compressed_storage.c \
        src/logger/compression_fastlz.c \
        src/logger/compression_miniz.c \
index d5fd0c1..fed63b1 100644 (file)
@@ -400,20 +400,6 @@ bool log_storage_reader_is_new_entry_available(const log_storage_reader *reader)
                (NULL == reader->current && NULL != reader->storage->entries);
 }
 
-const dlogutil_entry_s *log_storage_reader_peek_entry(log_storage_reader *reader)
-{
-       return NULL == reader->storage
-               ? NULL
-       : NULL == reader->current
-               ? reader->storage->entries
-                       ? &reader->storage->entries->entry
-                       : NULL
-               : log_storage_reader_entry_is_not_last(reader, reader->current)
-                       ? &reader->current->next->entry
-                       : NULL
-       ;
-}
-
 bool log_storage_reader_get_new_entry(log_storage_reader *reader, dlogutil_entry_s *entry)
 {
        assert(reader);
index 6278795..148279b 100644 (file)
@@ -149,18 +149,6 @@ bool log_storage_reader_is_new_entry_available(const log_storage_reader *reader)
  */
 bool log_storage_reader_get_new_entry(log_storage_reader *reader, dlogutil_entry_s *entry);
 
-
-/**
- * @brief This function "peeks" at the next unread log entry from the storage associated
- *        with a reader, without consuming it.
- * @param[in] reader The reader which will be used for reading.
- * @return The next log entry
- * @note Enjoy the entry, but do not free it. It is not yours. Do not store the pointer (for a long time),
- *       because this log entry may be deleted by the storage without warning. Precisely, when you put
- *       another log entry into the storage.
- */
-const dlogutil_entry_s *log_storage_reader_peek_entry(log_storage_reader *reader);
-
 /**
  * @brief Returns the storage that is the owner of a reader.
  * @param[in] reader The reader which is desired to return it's storage.
index 6efdada..79f2ad1 100644 (file)
@@ -110,45 +110,47 @@ static int print_out_logs(struct reader_common *_reader, struct now_t _time)
                return 0;
 
        while (true) {
-               log_id_t best_lsr_id = LOG_ID_INVALID;
-               const dlogutil_entry_s *best_entry = NULL;
                bool any_reader_exists = false;
                for (log_id_t i = 0; i < NELEMS(reader->log_storage_reader_ptrs); ++i) {
+                       if (reader->peek_cache[i].header.len)
+                               continue;
+
                        log_storage_reader *const lsr = reader->log_storage_reader_ptrs[i];
                        if (!lsr)
                                continue;
 
                        any_reader_exists = true;
-
                        if (!log_storage_reader_is_new_entry_available(lsr))
                                continue;
 
-                       const dlogutil_entry_s *const entry = log_storage_reader_peek_entry(lsr);
-                       assert(entry);
+                       const bool extraction_ok = log_storage_reader_get_new_entry(lsr, &reader->peek_cache[i].header);
+                       assert(extraction_ok);
 
-                       if (!best_entry || log_entry_is_earlier(reader->common.server->sort_by, entry, best_entry)) {
-                               best_lsr_id = i;
-                               best_entry = entry;
-                               continue;
+                       if (log_storage_reader_is_finished(lsr)) {
+                               log_storage_release_reader(lsr);
+                               reader->log_storage_reader_ptrs[i] = NULL;
                        }
                }
 
-               if (!any_reader_exists)
-                       return 1;
-               if (best_lsr_id == LOG_ID_INVALID)
-                       break;
-               log_storage_reader *const best_lsr = reader->log_storage_reader_ptrs[best_lsr_id];
-
-               struct dlogutil_entry_with_msg dewm;
-               const bool extraction_ok = log_storage_reader_get_new_entry(best_lsr, &dewm.header);
-               assert(extraction_ok);
+               dlogutil_entry_s *best_entry = NULL;
+               for (log_id_t i = 0; i < NELEMS(reader->peek_cache); ++i) {
+                       dlogutil_entry_s *const entry = &reader->peek_cache[i].header;
+                       if (!entry->len)
+                               continue;
 
-               if (log_storage_reader_is_finished(best_lsr)) {
-                       log_storage_release_reader(best_lsr);
-                       reader->log_storage_reader_ptrs[best_lsr_id] = NULL;
+                       if (!best_entry || log_entry_is_earlier(reader->common.server->sort_by, entry, best_entry))
+                               best_entry = entry;
                }
+               if (!best_entry) {
+                       if (!any_reader_exists)
+                               return 1;
+                       break;
+               }
+
+               int const result = reader_pipe_print_out_single_log(reader, best_entry);
+               memset(best_entry, 0, sizeof *reader->peek_cache);
 
-               switch (reader_pipe_print_out_single_log(reader, &dewm.header)) {
+               switch (result) {
                case 0: /* nothing more to do, let's do next loop */
                        break;
 
index ec11987..2019d55 100644 (file)
@@ -12,6 +12,7 @@ struct buf_params;
 struct reader_pipe {
        struct reader_common common;
        log_storage_reader *log_storage_reader_ptrs[LOG_ID_MAX];
+       struct dlogutil_entry_with_msg peek_cache[LOG_ID_MAX];
 };
 
 int reader_pipe_init(struct reader_pipe **reader, int enabled_buffers, struct logger *server,
diff --git a/src/tests/test_log_storage_peek.c b/src/tests/test_log_storage_peek.c
deleted file mode 100644 (file)
index d64925f..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * Copyright (c) 2023, Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *             http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include "../src/logger/log_storage.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <limits.h>
-
-void callback(const dlogutil_entry_s *le, void *user_data)
-{
-}
-
-int main(void)
-{
-       log_storage *const s = log_storage_create(1000000, DLOGUTIL_SORT_SENT_MONO);
-       assert(s);
-
-       log_storage_reader *const r_base_from_zero = log_storage_new_reader(s, false, false, callback, NULL);
-       log_storage_reader *const r_dump_from_zero = log_storage_new_reader(s,  true, false, callback, NULL);
-       log_storage_reader *const r_mino_from_zero = log_storage_new_reader(s, false,  true, callback, NULL);
-       assert(r_base_from_zero);
-       assert(r_dump_from_zero);
-       assert(r_mino_from_zero);
-
-       assert(log_storage_reader_peek_entry(r_base_from_zero) == NULL);
-       assert(log_storage_reader_peek_entry(r_dump_from_zero) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_zero) == NULL);
-
-
-       struct dlogutil_entry_with_msg m = {{sizeof(dlogutil_entry_s)+3, 0, 0, 1, 1, 123, 123, 0, 0, 0, 0, 0, 0, 0}, "a"};
-       assert(log_storage_add_new_entry(s, &m.header));
-
-       log_storage_reader *const r_base_from_one = log_storage_new_reader(s, false, false, callback, NULL);
-       log_storage_reader *const r_dump_from_one = log_storage_new_reader(s,  true, false, callback, NULL);
-       log_storage_reader *const r_mino_from_one = log_storage_new_reader(s, false,  true, callback, NULL);
-       assert(r_base_from_one);
-       assert(r_dump_from_one);
-       assert(r_mino_from_one);
-
-       const dlogutil_entry_s *entry;
-       entry = log_storage_reader_peek_entry(r_base_from_zero);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       entry = log_storage_reader_peek_entry(r_base_from_zero); // peek twice on purpose: peek shouldn't advance further
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       entry = log_storage_reader_peek_entry(r_mino_from_zero);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       entry = log_storage_reader_peek_entry(r_mino_from_zero);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       entry = log_storage_reader_peek_entry(r_base_from_one);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       entry = log_storage_reader_peek_entry(r_base_from_one);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       entry = log_storage_reader_peek_entry(r_dump_from_one);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       entry = log_storage_reader_peek_entry(r_dump_from_one);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       assert(log_storage_reader_peek_entry(r_dump_from_zero) == NULL);
-       assert(log_storage_reader_peek_entry(r_dump_from_zero) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_one) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_one) == NULL);
-
-
-       m.header.sec_sent_mono = 456;
-       assert(log_storage_add_new_entry(s, &m.header));
-
-       log_storage_reader *const r_base_from_two = log_storage_new_reader(s, false, false, callback, NULL);
-       log_storage_reader *const r_dump_from_two = log_storage_new_reader(s,  true, false, callback, NULL);
-       log_storage_reader *const r_mino_from_two = log_storage_new_reader(s, false,  true, callback, NULL);
-       assert(r_base_from_two);
-       assert(r_dump_from_two);
-       assert(r_mino_from_two);
-
-       entry = log_storage_reader_peek_entry(r_base_from_zero);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       entry = log_storage_reader_peek_entry(r_base_from_zero);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       entry = log_storage_reader_peek_entry(r_mino_from_zero);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       entry = log_storage_reader_peek_entry(r_mino_from_zero);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       entry = log_storage_reader_peek_entry(r_base_from_one);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       entry = log_storage_reader_peek_entry(r_base_from_one);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       entry = log_storage_reader_peek_entry(r_dump_from_one);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       entry = log_storage_reader_peek_entry(r_dump_from_one);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       entry = log_storage_reader_peek_entry(r_mino_from_one);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_mino_from_one);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_base_from_two);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       entry = log_storage_reader_peek_entry(r_base_from_two);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       entry = log_storage_reader_peek_entry(r_dump_from_two);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       entry = log_storage_reader_peek_entry(r_dump_from_two);
-       assert(entry);
-       assert(entry->sec_sent_mono == 123);
-       assert(log_storage_reader_peek_entry(r_dump_from_zero) == NULL);
-       assert(log_storage_reader_peek_entry(r_dump_from_zero) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_two) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_two) == NULL);
-
-       // advance
-       struct dlogutil_entry_with_msg dewm;
-       bool ok;
-       ok = log_storage_reader_get_new_entry(r_base_from_zero, &dewm.header);
-       assert(ok);
-       assert(dewm.header.sec_sent_mono == 123);
-       ok = log_storage_reader_get_new_entry(r_mino_from_zero, &dewm.header);
-       assert(ok);
-       assert(dewm.header.sec_sent_mono == 123);
-       ok = log_storage_reader_get_new_entry(r_base_from_one, &dewm.header);
-       assert(ok);
-       assert(dewm.header.sec_sent_mono == 123);
-       ok = log_storage_reader_get_new_entry(r_dump_from_one, &dewm.header);
-       assert(ok);
-       assert(dewm.header.sec_sent_mono == 123);
-       ok = log_storage_reader_get_new_entry(r_mino_from_one, &dewm.header);
-       assert(ok);
-       assert(dewm.header.sec_sent_mono == 456);
-       ok = log_storage_reader_get_new_entry(r_base_from_two, &dewm.header);
-       assert(ok);
-       assert(dewm.header.sec_sent_mono == 123);
-       ok = log_storage_reader_get_new_entry(r_dump_from_two, &dewm.header);
-       assert(ok);
-       assert(dewm.header.sec_sent_mono == 123);
-       assert(log_storage_reader_get_new_entry(r_dump_from_zero, &dewm.header) == false);
-       assert(log_storage_reader_get_new_entry(r_mino_from_two, &dewm.header) == false);
-
-
-       entry = log_storage_reader_peek_entry(r_base_from_zero);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_base_from_zero);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_mino_from_zero);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_mino_from_zero);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_base_from_one);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_base_from_one);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_base_from_two);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_base_from_two);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_dump_from_two);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_dump_from_two);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       assert(log_storage_reader_peek_entry(r_dump_from_zero) == NULL);
-       assert(log_storage_reader_peek_entry(r_dump_from_zero) == NULL);
-       assert(log_storage_reader_peek_entry(r_dump_from_one) == NULL);
-       assert(log_storage_reader_peek_entry(r_dump_from_one) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_one) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_one) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_two) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_two) == NULL);
-
-
-       // inserting a lagged log does nothing since it is received via callback
-       m.header.sec_sent_mono = 76;
-       assert(log_storage_add_new_entry(s, &m.header));
-
-       entry = log_storage_reader_peek_entry(r_base_from_zero);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_base_from_zero);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_mino_from_zero);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_mino_from_zero);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_base_from_one);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_base_from_one);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_base_from_two);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_base_from_two);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_dump_from_two);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       entry = log_storage_reader_peek_entry(r_dump_from_two);
-       assert(entry);
-       assert(entry->sec_sent_mono == 456);
-       assert(log_storage_reader_peek_entry(r_dump_from_zero) == NULL);
-       assert(log_storage_reader_peek_entry(r_dump_from_zero) == NULL);
-       assert(log_storage_reader_peek_entry(r_dump_from_one) == NULL);
-       assert(log_storage_reader_peek_entry(r_dump_from_one) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_one) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_one) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_two) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_two) == NULL);
-
-
-       // advance again
-       ok = log_storage_reader_get_new_entry(r_base_from_zero, &dewm.header);
-       assert(ok);
-       assert(dewm.header.sec_sent_mono == 456);
-       ok = log_storage_reader_get_new_entry(r_mino_from_zero, &dewm.header);
-       assert(ok);
-       assert(dewm.header.sec_sent_mono == 456);
-       ok = log_storage_reader_get_new_entry(r_base_from_one, &dewm.header);
-       assert(ok);
-       assert(dewm.header.sec_sent_mono == 456);
-       ok = log_storage_reader_get_new_entry(r_base_from_two, &dewm.header);
-       assert(ok);
-       assert(dewm.header.sec_sent_mono == 456);
-       ok = log_storage_reader_get_new_entry(r_dump_from_two, &dewm.header);
-       assert(ok);
-       assert(dewm.header.sec_sent_mono == 456);
-       assert(log_storage_reader_get_new_entry(r_dump_from_zero, &dewm.header) == false);
-       assert(log_storage_reader_get_new_entry(r_dump_from_one, &dewm.header) == false);
-       assert(log_storage_reader_get_new_entry(r_mino_from_one, &dewm.header) == false);
-       assert(log_storage_reader_get_new_entry(r_mino_from_two, &dewm.header) == false);
-
-       assert(log_storage_reader_peek_entry(r_base_from_zero) == NULL);
-       assert(log_storage_reader_peek_entry(r_base_from_zero) == NULL);
-       assert(log_storage_reader_peek_entry(r_dump_from_zero) == NULL);
-       assert(log_storage_reader_peek_entry(r_dump_from_zero) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_zero) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_zero) == NULL);
-       assert(log_storage_reader_peek_entry(r_base_from_one) == NULL);
-       assert(log_storage_reader_peek_entry(r_base_from_one) == NULL);
-       assert(log_storage_reader_peek_entry(r_dump_from_one) == NULL);
-       assert(log_storage_reader_peek_entry(r_dump_from_one) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_one) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_one) == NULL);
-       assert(log_storage_reader_peek_entry(r_base_from_two) == NULL);
-       assert(log_storage_reader_peek_entry(r_base_from_two) == NULL);
-       assert(log_storage_reader_peek_entry(r_dump_from_two) == NULL);
-       assert(log_storage_reader_peek_entry(r_dump_from_two) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_two) == NULL);
-       assert(log_storage_reader_peek_entry(r_mino_from_two) == NULL);
-
-
-       log_storage_release_reader(r_base_from_zero);
-       log_storage_release_reader(r_dump_from_zero);
-       log_storage_release_reader(r_mino_from_zero);
-       log_storage_release_reader(r_base_from_one);
-       log_storage_release_reader(r_dump_from_one);
-       log_storage_release_reader(r_mino_from_one);
-       log_storage_release_reader(r_base_from_two);
-       log_storage_release_reader(r_dump_from_two);
-       log_storage_release_reader(r_mino_from_two);
-       log_storage_free(s);
-
-       return EXIT_SUCCESS;
-}