
แ แแแแแแแแ แฎแแแก แฌแแ แกแแแ แชแแแแจแ แขแฃแแแแแแก แแแฌแแแแแแก แแ แแแแแแ แแแแแฎแแแ . แแแกแฃแคแแแแแแ แฃแแแ แแแฌแงแแแฃแแแงแ แแ แ แแแจแแ, แ แแชแ แขแแ แแแขแฃแแก แแแฎแกแแแ แแแ แฃแแแ แแแแแฌแฃแ แ, แแ แแแแ แฌแแแแกแฌแแ แแ แแแ แแแแฃแแ แกแแฎแจแแ แแ. แแ แแแแชแแแแกแแแแก tarantool-แก แแฅแแก Lua-แแ แแแฌแแ แแแ แแแแฃแแ, แ แแแแแกแแช แ.แฌ . แแ แแแแฃแแแก แฎแแแแแแแ แแแแแงแแแแแแก แจแแแแแ แแแแฎแแแแ, แ แแ แแก แฉแแแแแแแก แแ แแงแ แจแแกแแคแแ แแกแ: แแแแ แ แแแแแแแแแ แแแแแชแแแแแแก แแฃแแแแแ แแแฌแแแแแแก แแแแ, แแฃแ GC-แจแ แฉแแแแแฎแ แฉแ. แแแแขแแ, แฉแแแ แแแคแแฅแ แแ แกแแแฃแแแ แ แแแแแแแกแฃแแ แแแแฃแแแก แจแแแฃแจแแแแแแแ, แแ แแแแแแ, แ แแ แแ แแแ แแแแ แแแแก แแจแแแแแฃแ แแแแแ แแแฌแแ แแแ แแแแ แกแแฃแแแแแกแแ แแแแแแแ แแแแ แฉแแแแก แแ แแแแแแแแก.
แฉแแแแแแแก แแแ แแ แแแแแแแแ แแงแ แขแแ แแแขแฃแแแก แแแแฃแแ แ.แฌ . แแแกแจแ แแแแแงแแแแแฃแแ แแแแแแแ แแคแฃแซแแแแ แแ แคแแฅแขแก, แ แแ แกแแแ แชแแจแ แแฅแแแแแ แชแแแแ แแแแ, แ แแแแแแช แแแฃแแแแแแก แขแฃแแแแก แกแแชแแชแฎแแแแ, แกแฎแแ แกแแขแงแแแแแ แ แแ แแแฅแแแ, ttl. แคแแแฃแ แ แแแแฃแแ แกแแแแแ แแแก แกแแแ แชแแก, แแแแ แแแก TTL-แก แแแแแแแแ แ แแ แแก แแ แฌแงแแแขแก แฌแแจแแแแก แแฃ แแ แ แขแฃแแแ. Memcached แแแแฃแแแก แแแแ แแแ แขแแแ แแ แแแแแแแขแฃแ แแ, แแแแ แแ แซแแแแแ แแแแแแ. แแแ แแแแ, แแก แแ แแแแแแแกแฌแแแแแก แแแแแฅแกแแก แขแแแก, แ แแแแแแช แแจแแแแ แแ แแจแแแแ. แแแแ แแช, แแแแแแฃแ แฃแฆแแแขแแฎแแแแ แกแแแแแ แแแฃแแแ แงแแแแ แขแแแ, แ แแแแแแ แ แแแแแแแแ แจแแแซแแแแ แกแแแแแแ แแแแ แแงแแก. แแ แแฃ แแแแแแแกแฃแแ แแแแฃแแจแ แแแ แแแแ แแ แแแแแแ แแแแแแ แแ (แฎแแก แแแแแฅแกแ แชแแแแ แแแแกแแ แแงแ แแแแแงแแคแแแ), แแแจแแ แแแแ แแก แแแแแช แแ แแแฃแฅแชแแแแ แงแฃแ แแแฆแแแ. แแ แกแแแแ แแฃแแฅแขแแ แฌแแแแกแฌแแ แแแแกแแแฆแแ แ แแ แฉแแแแแ แฉแแแ แกแแแฃแแแ แ แแแแแก แแแฌแแ แแก แกแแกแแ แแแแแแ.
แแฆแฌแแ แ
แแแแฃแแแแขแแชแแ tarantool แแฅแแก แซแแแแแ แแแ แแ แแแแก แจแแกแแฎแแ, แแฃ แ แแแแ แฃแแแ แแแฌแแ แแ แแฅแแแแ แจแแแแฎแฃแแ แแ แแชแแแฃแ แแแ C-แจแ. แฃแแแ แแแแแก แงแแแแแกแ, แแแ แฉแแแ แแแแชแแแ แแแก, แ แแแ แแแแแแ แแก แฉแแแแ แแแแ แแ แซแแแแแแแแแ แแ แแแแแ, แ แแแแแแแช แแแแแฉแแแแแ แฅแแแแแ. แแกแแแ แฆแแ แก แงแฃแ แแแฆแแแแก แแแฅแชแแแ แแแแแฅแขแแแแ, แ แแแแแแแช แฎแแแแแกแแฌแแแแแแ แแฅแแแแ แกแแแฃแแแ แ แแแฎแฃแ แฃแแ แแแแฃแแแก แแแฌแแ แแกแแก, แแแ แซแแ , , ะธ .
แแแแแฌแงแแ แจแแ แแแแ แแ แแแแฎแแ, แ แแแแ แแแแแแงแฃแ แแแ แแแ แแแแ แแแฎแฃแ แฃแแ แแแแแแแกแฃแแ แแแแฃแแ:
fiber = require('fiber')
net_box = require('net.box')
box.cfg{listen = 3300}
box.schema.func.create('libcapped-expirationd.start', {language = 'C'})
box.schema.user.grant('guest', 'execute', 'function', 'libcapped-expirationd.start')
box.schema.func.create('libcapped-expirationd.kill', {language = 'C'})
box.schema.user.grant('guest', 'execute', 'function', 'libcapped-expirationd.kill')
box.schema.space.create('tester')
box.space.tester:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
capped_connection = net_box:new(3300)แกแแแแ แขแแแแกแแแแก, แฉแแแ แแแแฃแจแแแ tarantool แแแ แแฅแขแแ แแแจแ, แกแแแแช แแแแแแ แแแแก แฉแแแแ libcapped-expirationd.so แแแแแแแแแแ. แแแแแแแแแแแแแ แแฅแกแแแ แขแแ แแแฃแแแ แแ แ แคแฃแแฅแชแแ: แแแฌแงแแแ แแ แแแแแแ. แแแ แแแแ แแแแแฏแ แแ แแก แแ แคแฃแแฅแชแแแแแก แฎแแแแแกแแฌแแแแแแแ แแฃแแกแแแ box.schema.func.create แแ box.schema.user.grant แแแแแงแแแแแแ. แจแแแแแ แจแแฅแแแแแ แกแแแ แชแ, แ แแแแแก tuples แจแแแชแแแก แแฎแแแแ แกแแ แแแแก: แแแ แแแแ แแ แแก แฃแแแแแแฃแ แ แแแแแขแแคแแแแขแแ แ, แแแแ แ แแ แแก แแแคแแกแขแ แแ แแแกแแแ แแ แแก แขแฃแแแแก แกแแชแแชแฎแแแก แฎแแแแ แซแแแแแแ. แฉแแแ แแแจแแแแแ แฎแแก แแแแแฅแกแก แแแ แแแแ แแแแแก แแแแแ แแ แแฃแฌแแแแแ แแแ แแแแแ. แจแแแแแ แฉแแแ แแแฆแแแ แแแแจแแ แแก แแแแแฅแขแก แฉแแแแก แแจแแแแแฃแ แแแแแแแแแแแกแแแ.
แแแกแแแแแแแแแแ แกแแแฃแจแแแแแแก แจแแแแแ แแแฃแจแแแ แแแฌแงแแแแก แคแฃแแฅแชแแ:
capped_connection:call('libcapped-expirationd.start', {'non-indexed', box.space.tester.id, box.space.tester.index.primary, box.space.tester.index.primary, 3, 1024, 3600})แกแแแแแ แแแแก แแ แแก แแก แแแแแแแแ แแฃแกแขแแ แแกแแแ แแแฃแจแแแแแก, แ แแแแ แช แแแแแแแกแฃแแ แแแแฃแแ, แ แแแแแแช แแฃแ-แแแ แแแฌแแ แแแ. แแแฌแงแแแแก แคแฃแแฅแชแแแก แแแ แแแแ แแ แแฃแแแแขแ แแ แแก แแแแชแแแแก แฃแแแแแแฃแ แ แกแแฎแแแ. แแแแ แ แแ แแก แกแแแ แชแแก แแแแแขแแคแแแแขแแ แ. แแแกแแแ แแ แแก แฃแแแแแแฃแ แ แแแแแฅแกแ, แ แแแแแแแช แขแฃแแแแแ แฌแแแจแแแแ. แแแแแฎแ แแ แแก แแแฉแแแแแแแแ, แ แแแแแแแช แแแแแแแแ แขแแแแแก. แแแฎแฃแแ แแ แแก แแฃแแแแก แแแแแก แ แแชแฎแแ แกแแชแแชแฎแแแก แฎแแแแ แซแแแแแแแกแแแ แแ แแแ (แแฃแแแ แแชแแ แแฌแงแแแ 1-แแแ แแ แแ แ 0-แแแ!). แแแแฅแแกแ แแ แแแจแแแแ แแ แแก แกแแแแแ แแแแก แแแ แแแแขแ แแแ. 1024 แแ แแก แขแแแแแแก แแแฅแกแแแแแฃแ แ แ แแแแแแแแ, แ แแแแแแ แแแฎแแ แจแแกแแซแแแแแแแ แแ แ แขแ แแแแแฅแชแแแจแ. 3600 โ แกแ แฃแแ แกแแแแแ แแแแก แแ แ แฌแแแแแจแ.
แแแแแแแแแกแฌแแแแ, แ แแ แแแแแแแแ แแงแแแแแก แแแแแ แแแแแฅแกแก แชแแชแแแกแ แแ แฌแแจแแแกแแแแก. แแฃ แแก แแ แแก แฎแแก แแแแแฅแกแ, แแแจแแ แแแแแแแแแ แฎแแ แชแแแแแแแ แแแขแแ แ แแแกแแฆแแแแแแ แฃแคแ แ แแแแแ. แแฃ แแ แกแแแแแก แกแฎแแ, แแแแแแแแแ, แฐแแจแแก แแแแแฅแกแ, แแแจแแ แแแแแแแแแ แฎแแแแ, แ แแแแ แช แฌแแกแ, แจแแแแฎแแแแแแ แแแแแแแแแแ แแแแ. แงแแแแ แแแกแแแกแฃแ แ แขแแแ แแแกแแแแแ แแแฃแแแ แแ แ แกแแแแแ แแแแจแ.
แแแแแ แฉแแแกแแแ แ แแแแแแแแ แขแแแ แกแแแ แชแแจแ 60 แฌแแแแก แกแแชแแชแฎแแแก แฎแแแแ แซแแแแแแแ:
box.space.tester:insert{0, 'user0@tarantool.io', math.floor(fiber.time()) + 60}
box.space.tester:insert{1, 'user1@tarantool.io', math.floor(fiber.time()) + 60}
box.space.tester:insert{2, 'user2@tarantool.io', math.floor(fiber.time()) + 60}แแแแแ แจแแแแแแฌแแแ, แ แแ แฉแแกแแ แฌแแ แแแขแแแแ แแแกแ แฃแแแ:
tarantool> box.space.tester.index.primary:select()
---
- - [0, 'user0@tarantool.io', 1576418976]
- [1, 'user1@tarantool.io', 1576418976]
- [2, 'user2@tarantool.io', 1576418976]
...แแแแแแแแ แแ แแ แฉแแแ 60+ แฌแแแแก แจแแแแแ (แแแแแแ แแแ แแแแ แขแแแแก แฉแแกแแแก แแแกแแฌแงแแกแแแแ) แแ แแแแฎแแ, แ แแ แแแฎแฃแ แฃแแ แแแแแแแกแฃแแ แแแแฃแแ แฃแแแ แแแแฃแจแแแแแฃแแแ:
tarantool> box.space.tester.index.primary:select()
---
- []
...แจแแแแฉแแ แแ แแแแแแแแ:
capped_connection:call('libcapped-expirationd.kill', {'non-indexed'})แแแแแ แจแแแฎแแแแ แแแแ แ แแแแแแแแก, แกแแแแช แชแแแแ แแแแแฅแกแ แแแแแแงแแแแแ crawl-แแกแแแแก:
fiber = require('fiber')
net_box = require('net.box')
box.cfg{listen = 3300}
box.schema.func.create('libcapped-expirationd.start', {language = 'C'})
box.schema.user.grant('guest', 'execute', 'function', 'libcapped-expirationd.start')
box.schema.func.create('libcapped-expirationd.kill', {language = 'C'})
box.schema.user.grant('guest', 'execute', 'function', 'libcapped-expirationd.kill')
box.schema.space.create('tester')
box.space.tester:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
box.space.tester:create_index('exp', {unique = false, parts = {3, 'unsigned'}})
capped_connection = net_box:new(3300)แแฅ แงแแแแแคแแ แ แแแแแแ, แ แแช แแแ แแแ แแแแแแแแจแ, แ แแแแแแแแ แแแแแแแแแแกแแก แแแ แแ. แฉแแแ แแแจแแแแแ แฎแแก แแแแแฅแกแก แแแกแแแ แแแแแก แแแแแ แแ แแฃแฌแแแแแ แแแก exp. แแก แแแแแฅแกแ แแ แฃแแแ แแงแแก แฃแแแแแแฃแ แ, แแแแกแฎแแแแแแแ แแแแแฅแกแแกแแแ, แ แแแแแกแแช แแแ แแแแแแ แแฌแแแแแ. แแแแแแแแแ แแแแฎแแ แชแแแแแแแ แแฅแกแแแฃแแขแแชแแแก แแแแแฅแกแแ, แฎแแแ แฌแแจแแ แแแ แแแแแแ. แฉแแแ แแแแฎแกแแแก, แ แแ แแแ แ แแ แแแ แแแแแแแแแ แแฎแแแแ แแแ แแแแแแ แแแแแฅแกแแก แแแแแงแแแแแแ.
แแแกแแแแแแแแแแ แกแแแฃแจแแแแแแก แจแแแแแ แฉแแแ แแแขแแ แแแ แแแฌแงแแแแก แคแฃแแฅแชแแแก แแฎแแแ แแ แแฃแแแแขแแแแ:
capped_connection:call('libcapped-expirationd.start', {'indexed', box.space.tester.id, box.space.tester.index.primary, box.space.tester.index.exp, 3, 1024, 3600})แแแแแ แแแแแ แฉแแแกแแแ แ แแแแแแแแ แขแแแ แกแแแ แชแแจแ 60 แฌแแแแก แกแแชแแชแฎแแแก แฎแแแแ แซแแแแแแแ:
box.space.tester:insert{0, 'user0@tarantool.io', math.floor(fiber.time()) + 60}
box.space.tester:insert{1, 'user1@tarantool.io', math.floor(fiber.time()) + 60}
box.space.tester:insert{2, 'user2@tarantool.io', math.floor(fiber.time()) + 60}30 แฌแแแแก แจแแแแแ, แแแแแแแแแ, แฉแแแ แแแแแแแขแแแ แแแแแ แ แแแแแแแแ แขแแแก:
box.space.tester:insert{3, 'user3@tarantool.io', math.floor(fiber.time()) + 60}
box.space.tester:insert{4, 'user4@tarantool.io', math.floor(fiber.time()) + 60}
box.space.tester:insert{5, 'user5@tarantool.io', math.floor(fiber.time()) + 60}แแแแแ แจแแแแแแฌแแแ, แ แแ แฉแแกแแ แฌแแ แแแขแแแแ แแแกแ แฃแแแ:
tarantool> box.space.tester.index.primary:select()
---
- - [0, 'user0@tarantool.io', 1576421257]
- [1, 'user1@tarantool.io', 1576421257]
- [2, 'user2@tarantool.io', 1576421257]
- [3, 'user3@tarantool.io', 1576421287]
- [4, 'user4@tarantool.io', 1576421287]
- [5, 'user5@tarantool.io', 1576421287]
...แแแแแแแแ แแ แแ แฉแแแ 60+ แฌแแแแก แจแแแแแ (แแแแแแ แแแ แแแแ แขแแแแก แฉแแกแแแก แแแกแแฌแงแแกแแแแ) แแ แแแแฎแแ, แ แแ แแแฎแฃแ แฃแแ แแแแแแแกแฃแแ แแแแฃแแ แฃแแแ แแแแฃแจแแแแแฃแแแ:
tarantool> box.space.tester.index.primary:select()
---
- - [3, 'user3@tarantool.io', 1576421287]
- [4, 'user4@tarantool.io', 1576421287]
- [5, 'user5@tarantool.io', 1576421287]
...แกแแแ แชแแจแ แฏแแ แแแแแ แแแ แฉแ แ แแแแแแแแ แขแแแ, แ แแแแแแกแแช แแแแแ 30 แฌแแแ แแฅแแแแแ แกแแชแแชแฎแแ. แฃแคแ แ แแแขแแช, แกแแแแแ แแแ แจแแฌแงแแ, แ แแแแกแแช แแแแแแแแชแแแแแแ แขแแแแแแ ID 2-แแ แแ แกแแชแแชแฎแแแก แฎแแแแ แซแแแแแแ 1576421257 แขแฃแแแแ ID 3-แแ แแ 1576421287 แกแแชแแชแฎแแแก แฎแแแแ แซแแแแแแแแ. แแฅแกแแแฃแแขแแชแแแก แแแแแฅแกแแก แแแกแแฆแแแแแ. แแก แแ แแก แแแแแแแแ, แ แแแแแก แแแฆแฌแแแแช แแแแแแแแแ แแแแแแแแ.
แจแแแแฉแแ แแ แแแแแแแแ:
capped_connection:call('libcapped-expirationd.kill', {'indexed'})ะ ะตะฐะปะธะทะฐัะธั
แแ แแแฅแขแแก แงแแแแ แแแฎแแกแแแแแแแแก แกแแแฅแแแแแ แกแแฃแแแแแกแ แแแ แแแกแ แแ แแแแแแแฃแ แ แฌแงแแ แแ. ! แแฃแแแแแแชแแแก แคแแ แแแแแจแ แฉแแแ แงแฃแ แแแฆแแแแก แแแแแแแฎแแแแแแ แแฎแแแแ แงแแแแแแ แแแแจแแแแแแแแ แแฃแแฅแขแแแแ, แแแ แซแแ, แกแแแ แชแแก แจแแแแแแแแ แแแแแ แแแแแแแ.
แแ แแฃแแแแขแแแ, แ แแแแแแกแแช แฉแแแ แแแแแแชแแแ แแแฌแงแแแแก แแแแแแก, แแแแฎแแแ แกแขแ แฃแฅแขแฃแ แแจแ, แ แแแแแกแแช แแฌแแแแแ expirationd_task:
struct expirationd_task
{
char name[256];
uint32_t space_id;
uint32_t rm_index_id;
uint32_t it_index_id;
uint32_t it_index_type;
uint32_t field_no;
uint32_t scan_size;
uint32_t scan_time;
};แกแแฎแแแแก แแขแ แแแฃแขแ แแ แแก แแแแชแแแแก แกแแฎแแแ. space_id แแขแ แแแฃแขแ แแ แแก แกแแแ แชแแก แแแแแขแแคแแแแขแแ แ. rm_index_id แแขแ แแแฃแขแ แแ แแก แฃแแแแแแฃแ แ แแแแแฅแกแแก แแแแแขแแคแแแแขแแ แ, แ แแแแแแแช แฌแงแแแแ แฌแแแจแแแแ. it_index_id แแขแ แแแฃแขแ แแ แแก แแแแแฅแกแแก แแแแแขแแคแแแแขแแ แ, แ แแแแแแแช แแแฎแแแแ แขแแแแแแก แแแแแ. it_index_type แแขแ แแแฃแขแ แแ แแก แแแแแฅแกแแก แขแแแ, แ แแแแแแแช แแแฎแแแแ แขแแขแแแแก แแแแแ. filed_no แแขแ แแแฃแขแ แแ แแก tuple แแแแแก แแแแแ แ แกแแชแแชแฎแแแก แฎแแแแ แซแแแแแแแกแแแ แแ แแแ. scan_size แแขแ แแแฃแขแ แแ แแก แขแแแแแแก แแแฅแกแแแแแฃแ แ แ แแแแแแแแ, แ แแแแแแแช แแแกแแแแแ แแแฃแแแ แแ แ แขแ แแแแแฅแชแแแจแ. scan_time แแขแ แแแฃแขแ แแ แแก แกแแแแแ แแแแก แกแ แฃแแ แแ แ แฌแแแแแจแ.
แฉแแแ แแ แแแแแแฎแแแแแ แแ แแฃแแแแขแแแแก แแแแแแแก. แแก แแ แแก แจแ แแแแขแแแแแ, แแแแ แแ แแแ แขแแแ แกแแแฃแจแแ, แ แแแแแจแแช แแแแแแแแแแ แแแแแฎแแแ แแแแ . แกแแ แแฃแแแแแ แจแแแซแแแแ แฌแแ แแแแจแแแก แแฎแแแแ แแ แแแแแฅแกแแแแ, แ แแแแแแแช แแแแแชแแแฃแแแ Lua-แแแ, แ แแแแ แช แแแแแชแแแแ แ แแฃแแ แกแขแ แฃแฅแขแฃแ แ mp_map แขแแแแก, แแ แแ แ แแแ แขแแแ แขแแแแแแก mp_bool, mp_double, mp_int, mp_uint แแ mp_array. แแแแ แแ แแ แแ แแก แกแแญแแ แ แแแแแ แแแแแฅแกแแก แแแแแแแแแแแ. แแฅแแแ แฃแแ แแแแ แฃแแแ แจแแแแแฌแแแ แแแกแ แฃแแแแแแฃแ แแแ, แแแแแแแแแแ แขแแแ แแ แแแแแฆแแ แแแแแขแแคแแแแขแแ แ.
แฉแแแ แฉแแแแแแแแแ แงแแแแ แคแฃแแฅแชแแแก แแ แแขแแขแแแแแก, แ แแแแแแแช แแแแแแงแแแแแ แแแแแแแแกแแแแก:
bool expirationd_parse_name(struct expirationd_task *task, const char **pos);
bool expirationd_parse_space_id(struct expirationd_task *task, const char **pos);
bool expirationd_parse_rm_index_id(struct expirationd_task *task, const char **pos);
bool expirationd_parse_rm_index_unique(struct expirationd_task *task, const char **pos);
bool expirationd_parse_rm_index(struct expirationd_task *task, const char **pos);
bool expirationd_parse_it_index_id(struct expirationd_task *task, const char **pos);
bool expirationd_parse_it_index_type(struct expirationd_task *task, const char **pos);
bool expirationd_parse_it_index(struct expirationd_task *task, const char **pos);
bool expirationd_parse_field_no(struct expirationd_task *task, const char **pos);
bool expirationd_parse_scan_size(struct expirationd_task *task, const char **pos);
bool expirationd_parse_scan_time(struct expirationd_task *task, const char **pos);แแฎแแ แแแแแแแแแ แงแแแแแแ แแแแจแแแแแแแแแแ - แกแแแ แชแแก แแแแ แแแก แแแแแ แแ แขแฃแแแแแแก แฌแแจแแแก แแแแแแแแ. แขแแแแแแก แแแแแแฃแแ แแแแแ, แ แแแแแแช แแ แแฆแแแแขแแแ scan_size-แก, แแแกแแแแแ แแแฃแแแ แแ แแชแแแแแ แแ แแ แขแ แแแแแฅแชแแแก แคแแ แแแแแจแ. แฌแแ แแแขแแแแก แจแแแแฎแแแแแจแ, แแก แขแ แแแแแฅแชแแ แฉแแแแแแแแ; แแฃ แจแแชแแแแ แแแฎแแ, แแก แฃแแแ แแฎแแแ. expirationd_iterate แคแฃแแฅแชแแแก แแแแ แแ แแฃแแแแขแ แแ แแก แแแแแแแขแแ แ แแขแแ แแขแแ แแกแแแ, แกแแแแแแแช แแฌแงแแแ แแ แแ แซแแแแแแ แกแแแแแ แแแ. แแก แแแแแแ แแแ แแแ แแแแ แจแแแแแ, แกแแแแ แจแแชแแแแ แแ แแแฎแแแแ, แกแแแ แชแ แแแแแฌแฃแ แแแ แแ แแ แแชแแกแแก แฌแแแแกแฌแแ แจแแฉแแ แแแ แจแแฃแซแแแแแแแ. แคแฃแแฅแชแแ expirationd_expired แแแแฌแแแแก tuple-แแก แกแแชแแชแฎแแแก, expirationd_delete แฌแแจแแแก แขแแแก, expirationd_breakable แแแแฌแแแแก, แแแญแแ แแแแ แแฃ แแ แ แแแแ แซแแแแแ.
Expirationd_iterate แคแฃแแฅแชแแแก แแแแ:
static bool
expirationd_iterate(struct expirationd_task *task, box_iterator_t **iterp)
{
box_iterator_t *iter = *iterp;
box_txn_begin();
for (uint32_t i = 0; i < task->scan_size; ++i) {
box_tuple_t *tuple = NULL;
if (box_iterator_next(iter, &tuple) < 0) {
box_iterator_free(iter);
*iterp = NULL;
box_txn_rollback();
return false;
}
if (!tuple) {
box_iterator_free(iter);
*iterp = NULL;
box_txn_commit();
return true;
}
if (expirationd_expired(task, tuple))
expirationd_delete(task, tuple);
else if (expirationd_breakable(task))
break;
}
box_txn_commit();
return true;
}แคแฃแแฅแชแแแก แแแแ expirationd_expired:
static bool
expirationd_expired(struct expirationd_task *task, box_tuple_t *tuple)
{
const char *buf = box_tuple_field(tuple, task->field_no - 1);
if (!buf || mp_typeof(*buf) != MP_UINT)
return false;
uint64_t val = mp_decode_uint(&buf);
if (val > fiber_time64() / 1000000)
return false;
return true;
}Expirationd_delete แคแฃแแฅแชแแแก แแแแ:
static void
expirationd_delete(struct expirationd_task *task, box_tuple_t *tuple)
{
uint32_t len;
const char *str = box_tuple_extract_key(tuple, task->space_id, task->rm_index_id, &len);
box_delete(task->space_id, task->rm_index_id, str, str + len, NULL);
}Expirationd_breakable แคแฃแแฅแชแแแก แแแแ:
static bool
expirationd_breakable(struct expirationd_task *task)
{
return task->it_index_id != task->rm_index_id && task->it_index_type == ITER_GT;
}แแแแแชแฎแแแแก
แฌแงแแ แแก แแแแแก แแแฎแแ แจแแแแซแแแแ แแฅ !
แฌแงแแ แ: www.habr.com
