#include "journal-remote-parse.h"
#include "journald-native.h"
-#define LINE_CHUNK 1024u
+#define LINE_CHUNK 8*1024u
void source_free(RemoteSource *source) {
if (!source)
if (source->size - source->filled < LINE_CHUNK &&
!GREEDY_REALLOC(source->buf, source->size,
- MAX(source->filled + LINE_CHUNK, DATA_SIZE_MAX)))
+ MIN(source->filled + LINE_CHUNK, DATA_SIZE_MAX)))
return log_oom();
- assert(source->size - source->filled >= LINE_CHUNK);
+ assert(source->size - source->filled >= LINE_CHUNK ||
+ source->size == DATA_SIZE_MAX);
+
+ // FIXME: the buffer probably needs to be bigger than DATA_SIZE_MAX
+ // to accomodate such big fields.
n = read(source->fd, source->buf + source->filled,
- MAX(source->size, DATA_SIZE_MAX) - source->filled);
+ source->size - source->filled);
if (n < 0) {
if (errno != EAGAIN && errno != EWOULDBLOCK)
log_error("read(%d, ..., %zd): %m", source->fd,
Writer *w;
int r;
bool finished = false;
+ size_t remaining;
assert(source);
/* The upload is finished */
- if (source_non_empty(source)) {
- log_warning("EOF reached with incomplete data");
- return mhd_respond(connection, MHD_HTTP_EXPECTATION_FAILED,
- "Trailing data not processed.");
+ remaining = source_non_empty(source);
+ if (remaining > 0) {
+ log_warning("Premature EOFbyte. %zu bytes lost.", remaining);
+ return mhd_respondf(connection, MHD_HTTP_EXPECTATION_FAILED,
+ "Premature EOF. %zu bytes of trailing data not processed.",
+ remaining);
}
return mhd_respond(connection, MHD_HTTP_ACCEPTED, "OK.\n");
*event_count = 0;
while ((w = hashmap_steal_first(s->writers))) {
+ log_info("seqnum %"PRIu64, w->seqnum);
*event_count += w->seqnum;
r = writer_close(w);
r = process_source(source, w, arg_compress, arg_seal);
if (source->state == STATE_EOF) {
+ size_t remaining;
+
log_info("EOF reached with source fd:%d (%s)",
source->fd, source->name);
- if (source_non_empty(source))
- log_warning("EOF reached with incomplete data");
+
+ remaining = source_non_empty(source);
+ if (remaining > 0)
+ log_warning("Premature EOF. %zu bytes lost.", remaining);
remove_source(s, source->fd);
log_info("%zd active source remaining", s->active);
return 0;