Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
f6d1eac
nvtable: extract nv_table_resolve_direct() function
bazsi Jan 14, 2020
b3f7ed4
nvtable: extract nv_table_is_handle_static() function
bazsi Jan 14, 2020
e43d266
nvtable: fix off-by-one in checking whether a handle is static or dyn…
bazsi Jan 14, 2020
d99e9f7
nvtable: don't add the "name" value for static entries in case they a…
bazsi Jan 14, 2020
64a54ad
nvtable: don't allocate space for "name" for static entries
bazsi Jan 14, 2020
14b55f2
nvtable: fix handling of unset()-ing referenced name-value pairs
bazsi Jan 15, 2020
1cfc653
mvtable: add nv_table_compact() function and tests
bazsi Jan 14, 2020
1da9475
logmsg-serialize: drop unused LogMessageVersion typedef
bazsi Jan 15, 2020
5099842
logmsg-serialize: add support for serialization flags
bazsi Jan 15, 2020
14ef1a7
logmsg-serialize: fix output of deserialization performance test
bazsi Jan 16, 2020
fc1c857
logmsg-serialize: impement support for compaction during serialization
bazsi Jan 15, 2020
9b9c7ce
nvtable: improve performance of nv_table_add_value() when entries are…
bazsi Jan 16, 2020
7e0c2a2
diskq: add compaction(yes/no) parameter
bazsi Jan 15, 2020
1aa4d8c
nvtable: extract __find_index_entry()
bazsi Jan 16, 2020
92b46b8
nvtable: improve __find_index_entry()
bazsi Jan 16, 2020
300cc04
nvtable: extract _overwrite_with_a_direct_entry() function
bazsi Jan 16, 2020
6580bfc
nvtable: extract NVEntry size calculation
bazsi Jan 16, 2020
e242af1
nvtable: get rid off G_UNLIKELY and unneeded casts in length checks w…
bazsi Jan 16, 2020
ebc3c46
nvtable: extract nv_table_break_references_to_entry() function
bazsi Jan 16, 2020
97b2dae
nvtable: avoid having to lookup the same handle twice in nv_table_add…
bazsi Jan 16, 2020
a6aa091
nvtable: rename nv_table_reserve_table_entry() to _alloc_index_entry()
bazsi Jan 16, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions lib/logmsg/logmsg-serialize-fixup.c
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,7 @@ _allocate_handle_for_entry_name(NVHandle old_handle, NVEntry *entry)
static NVHandle
_allocate_handle_of_referenced_entry(NVTable *self, NVHandle ref_handle)
{
NVIndexEntry *index_entry;
NVEntry *ref_entry = nv_table_get_entry(self, ref_handle, &index_entry);
NVEntry *ref_entry = nv_table_get_entry(self, ref_handle, NULL, NULL);

return _allocate_handle_for_entry_name(ref_handle, ref_entry);
}
Expand Down
18 changes: 14 additions & 4 deletions lib/logmsg/logmsg-serialize.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,26 +69,36 @@ _serialize_message(LogMessageSerializationState *state)
serialize_write_uint8(sa, msg->num_sdata);
serialize_write_uint8(sa, msg->alloc_sdata);
serialize_write_uint32_array(sa, (guint32 *) msg->sdata, msg->num_sdata);
nv_table_serialize(state, msg->payload);

NVTable *payload;

if (state->flags & LMSF_COMPACTION)
payload = nv_table_compact(msg->payload);
else
payload = nv_table_ref(msg->payload);

nv_table_serialize(state, payload);
nv_table_unref(payload);
return TRUE;
}

gboolean
log_msg_serialize_with_ts_processed(LogMessage *self, SerializeArchive *sa, const UnixTime *processed)
log_msg_serialize_with_ts_processed(LogMessage *self, SerializeArchive *sa, const UnixTime *processed, guint32 flags)
{
LogMessageSerializationState state = { 0 };

state.version = LGM_V26;
state.msg = self;
state.sa = sa;
state.processed = processed;
state.flags = flags;
return _serialize_message(&state);
}

gboolean
log_msg_serialize(LogMessage *self, SerializeArchive *sa)
log_msg_serialize(LogMessage *self, SerializeArchive *sa, guint32 flags)
{
return log_msg_serialize_with_ts_processed(self, sa, NULL);
return log_msg_serialize_with_ts_processed(self, sa, NULL, flags);
}

static gboolean
Expand Down
14 changes: 10 additions & 4 deletions lib/logmsg/logmsg-serialize.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
* 26 use 32 bit values nvtable
*/

typedef enum _LogMessageVersion
enum _LogMessageVersion
{
LGM_V01 = 1,
LGM_V10 = 10,
Expand All @@ -63,10 +63,16 @@ typedef enum _LogMessageVersion
LGM_V24 = 24,
LGM_V25 = 25,
LGM_V26 = 26
} LogMessageVersion;
};

enum _LogMessageSerializationFlags
{
LMSF_COMPACTION = 0x0001,
};

gboolean log_msg_deserialize(LogMessage *self, SerializeArchive *sa);
gboolean log_msg_serialize_with_ts_processed(LogMessage *self, SerializeArchive *sa, const UnixTime *processed);
gboolean log_msg_serialize(LogMessage *self, SerializeArchive *sa);
gboolean log_msg_serialize_with_ts_processed(LogMessage *self, SerializeArchive *sa, const UnixTime *processed,
guint32 flags);
gboolean log_msg_serialize(LogMessage *self, SerializeArchive *sa, guint32 flags);

#endif
21 changes: 20 additions & 1 deletion lib/logmsg/logmsg.c
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ const gchar *builtin_value_names[] =
"MSGID",
"SOURCE",
"LEGACY_MSGHDR",
"__RESERVED_LM_V_MAX",
NULL,
};

Expand Down Expand Up @@ -560,6 +561,7 @@ log_msg_set_value(LogMessage *self, NVHandle handle, const gchar *value, gssize
{
/* can't grow the payload, it has reached the maximum size */
msg_info("Cannot store value for this log message, maximum size has been reached",
evt_tag_int("maximum_payload", NV_TABLE_MAX_BYTES),
evt_tag_str("name", name),
evt_tag_printf("value", "%.32s%s", value, value_len > 32 ? "..." : ""));
break;
Expand All @@ -580,7 +582,24 @@ log_msg_set_value(LogMessage *self, NVHandle handle, const gchar *value, gssize
void
log_msg_unset_value(LogMessage *self, NVHandle handle)
{
nv_table_unset_value(self->payload, handle);
while (!nv_table_unset_value(self->payload, handle))
{
/* error allocating string in payload, reallocate */
guint32 old_size = self->payload->size;
if (!nv_table_realloc(self->payload, &self->payload))
{
/* can't grow the payload, it has reached the maximum size */
const gchar *name = log_msg_get_value_name(handle, NULL);
msg_info("Cannot unset value for this log message, maximum size has been reached",
evt_tag_int("maximum_payload", NV_TABLE_MAX_BYTES),
evt_tag_str("name", name));
break;
}
guint32 new_size = self->payload->size;
self->allocated_bytes += (new_size - old_size);
stats_counter_add(count_allocated_bytes, new_size-old_size);
stats_counter_inc(count_payload_reallocs);
}

if (_value_invalidates_legacy_header(handle))
log_msg_unset_value(self, LM_V_LEGACY_MSGHDR);
Expand Down
Loading