Software /
code /
prosody
Comparison
util/datamanager.lua @ 13236:9c72f93b7a02
util.datamanager: Add way to close indexed list store
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 21 Jul 2023 18:30:06 +0200 |
parent | 13235:dbd7a6b09ada |
child | 13238:26327eac56dc |
comparison
equal
deleted
inserted
replaced
13235:dbd7a6b09ada | 13236:9c72f93b7a02 |
---|---|
459 return success, ret; | 459 return success, ret; |
460 end | 460 end |
461 return item; | 461 return item; |
462 end | 462 end |
463 | 463 |
464 local function list_close(list) | |
465 if list.index and list.index.file then | |
466 list.index.file:close(); | |
467 end | |
468 return list.file:close(); | |
469 end | |
470 | |
464 local indexed_list_mt = { | 471 local indexed_list_mt = { |
465 __index = function(t, i) | 472 __index = function(t, i) |
466 if type(i) ~= "number" or i % 1 ~= 0 or i < 1 then | 473 if type(i) ~= "number" or i % 1 ~= 0 or i < 1 then |
467 return | 474 return |
468 end | 475 end |
474 return item; | 481 return item; |
475 end; | 482 end; |
476 __len = function(t) | 483 __len = function(t) |
477 return #t.index; | 484 return #t.index; |
478 end; | 485 end; |
486 __close = list_close; | |
479 } | 487 } |
480 | 488 |
481 local function list_load(username, host, datastore) | 489 local function list_load(username, host, datastore) |
482 local items = {}; | 490 local items = {}; |
483 local data, err, errno = envloadfile(getpath(username, host, datastore, "list"), {item = function(i) t_insert(items, i); end}); | 491 local data, err, errno = envloadfile(getpath(username, host, datastore, "list"), {item = function(i) t_insert(items, i); end}); |
514 local index, err = get_list_index(username, host, datastore); | 522 local index, err = get_list_index(username, host, datastore); |
515 if not index then | 523 if not index then |
516 file:close() | 524 file:close() |
517 return index, err; | 525 return index, err; |
518 end | 526 end |
519 return setmetatable({ file = file; index = index }, indexed_list_mt); | 527 return setmetatable({ file = file; index = index; close = list_close }, indexed_list_mt); |
520 end | 528 end |
521 | 529 |
522 local function shift_index(index_filename, index, trim_to, offset) | 530 local function shift_index(index_filename, index, trim_to, offset) |
523 local index_scratch = index_filename .. "~"; | 531 local index_scratch = index_filename .. "~"; |
524 local new_index, err = io_open(index_scratch, "w"); | 532 local new_index, err = io_open(index_scratch, "w"); |