Esempio n. 1
0
static void
affile_sd_recover_state(LogPipe *s, GlobalConfig *cfg, LogProtoServer *proto)
{
  AFFileSourceDriver *self = (AFFileSourceDriver *) s;

  if (self->file_open_options.is_pipe || self->follow_freq <= 0)
    return;

  if (!log_proto_server_restart_with_state(proto, cfg->state, affile_sd_format_persist_name(self)))
    {
      msg_error("Error converting persistent state from on-disk format, losing file position information",
                evt_tag_str("filename", self->filename->str),
                NULL);
      return;
    }
}
Esempio n. 2
0
  static void
affile_sd_save_pos(LogPipe *s, GlobalConfig *cfg)
{
  AFFileSourceDriver *self = (AFFileSourceDriver *) s;

  if (cfg->persist && (self->flags & AFFILE_PIPE) == 0)
  {
    SerializeArchive *archive;
    GString *str = g_string_sized_new(0);

    archive = serialize_string_archive_new(str);
    log_reader_save_state((LogReader *) self->reader, archive);
    cfg_persist_config_add_survivor(cfg, affile_sd_format_persist_name(self), str->str,  str->len, TRUE);
    serialize_archive_free(archive);
    g_string_free(str, TRUE);
  }
}
Esempio n. 3
0
  static void
affile_sd_load_pos(LogPipe *s, GlobalConfig *cfg)
{
  AFFileSourceDriver *self = (AFFileSourceDriver *) s;
  gchar *str;
  off_t cur_pos;
  gsize str_len;
  gint version;

  if ((self->flags & AFFILE_PIPE) || !cfg->persist)
    return;

  str = cfg_persist_config_fetch(cfg, affile_sd_format_persist_name(self), &str_len, &version);
  if (!str)
    return;

  if (version == 2)
  {
    /* NOTE: legacy, should be removed once the release after 3.0 is published */
    cur_pos = strtoll(str, NULL, 10);
    log_reader_update_pos((LogReader *) self->reader, cur_pos);
    g_free(str);
  }
  else if (version >= 3)
  {
    GString *g_str = g_string_new("");
    SerializeArchive *archive;

    g_str = g_string_assign_len(g_str, str, str_len);
    archive = serialize_string_archive_new(g_str);

    log_reader_restore_state((LogReader *) self->reader, archive);

    serialize_archive_free(archive);
    g_string_free(g_str, TRUE);
    g_free(str);

  }
}