Mercurial > prosody-modules
comparison mod_storage_xmlarchive/mod_storage_xmlarchive.lua @ 1727:8f12afb633ec
mod_storage_xmlarchive: Attempt to recover after parse failures
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Mon, 11 May 2015 14:17:35 +0200 |
| parents | 160c35d2a5a2 |
| children | a51beeb5aecf |
comparison
equal
deleted
inserted
replaced
| 1726:160c35d2a5a2 | 1727:8f12afb633ec |
|---|---|
| 67 | 67 |
| 68 local stream_sess = { notopen = true }; | 68 local stream_sess = { notopen = true }; |
| 69 local stream = new_stream(stream_sess, { handlestanza = cb, stream_ns = "jabber:client"}); | 69 local stream = new_stream(stream_sess, { handlestanza = cb, stream_ns = "jabber:client"}); |
| 70 local dates = dm.list_load(username, module.host, self.store) or empty; | 70 local dates = dm.list_load(username, module.host, self.store) or empty; |
| 71 stream:feed(st.stanza("stream", { xmlns = "jabber:client" }):top_tag()); | 71 stream:feed(st.stanza("stream", { xmlns = "jabber:client" }):top_tag()); |
| 72 stream_sess.notopen = nil; | 72 local function reset_stream() |
| 73 stream:reset(); | |
| 74 stream_sess.notopen = true; | |
| 75 stream:feed(st.stanza("stream", { xmlns = "jabber:client" }):top_tag()); | |
| 76 stream_sess.notopen = nil; | |
| 77 end | |
| 78 reset_stream(); | |
| 73 | 79 |
| 74 local limit = query.limit; | 80 local limit = query.limit; |
| 75 local start_day, step, last_day = 1, 1, #dates; | 81 local start_day, step, last_day = 1, 1, #dates; |
| 76 local count = 0; | 82 local count = 0; |
| 77 local rev = query.reverse; | 83 local rev = query.reverse; |
| 138 xmlfile:seek("set", item.offset); | 144 xmlfile:seek("set", item.offset); |
| 139 local data = xmlfile:read(item.length); | 145 local data = xmlfile:read(item.length); |
| 140 local ok, err = stream:feed(data); | 146 local ok, err = stream:feed(data); |
| 141 if not ok then | 147 if not ok then |
| 142 module:log("warn", "Parse error in %s at %d+%d: %s", filename, item.offset, item.length, err); | 148 module:log("warn", "Parse error in %s at %d+%d: %s", filename, item.offset, item.length, err); |
| 149 reset_stream(); | |
| 143 end | 150 end |
| 144 if result then | 151 if result then |
| 145 local stanza = result; | 152 local stanza = result; |
| 146 result = nil; | 153 result = nil; |
| 147 return item.id, stanza, item.when, item.with; | 154 return item.id, stanza, item.when, item.with; |
