เชฅเซเชกเชพ เชธเชฎเชฏ เชชเชนเซเชฒเชพ เช
เชฎเชจเซ เชเชเซเชฏเชพเชเชฎเชพเช เชเซเชฏเซเชชเชฒ เชธเชพเชซ เชเชฐเชตเชพเชจเซ เชธเชฎเชธเซเชฏเชพเชจเซ เชธเชพเชฎเชจเซ เชเชฐเชตเซ เชชเชกเซเชฏเซ เชนเชคเซ
เช
เชฎเชพเชฐเชพ เชฎเชพเชเซ เชเช เชธเชพเชฐเซเช เชเชฆเชพเชนเชฐเชฃ เชเชนเซเชตเชพเชฏ เชเซเชฐเซเชจเซเชเซเชฒ เชฎเซเชกเซเชฏเซเชฒ เชนเชคเซเช
เชตเชฐเซเชฃเชจ
เชเซเชฐเซเชจเซเชเซเชฒ เชฎเชพเชเซเชจเชพ เชฆเชธเซเชคเชพเชตเซเชเซ เชเซเชฌ เชธเชพเชฐเชพ เชเซ
เชเชพเชฒเซ เชฆเซเชฐเชฅเซ เชถเชฐเซ เชเชฐเซเช เช เชจเซ เชเซเชเช เชเซ เชธเชฎเชพเชชเซเชค เชฅเชฏเซเชฒ เชฎเซเชกเซเชฏเซเชฒ เชฌเชนเชพเชฐเชฅเซ เชเซเชตเซเช เชฆเซเชเชพเชฏ เชเซ:
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)
เชธเชฐเชณเชคเชพ เชฎเชพเชเซ, เช เชฎเซ เชเซเชฏเชพเช เช เชฎเชพเชฐเซ libcapped-expirationd.so เชฒเชพเชเชฌเซเชฐเซเชฐเซ เชธเซเชฅเชฟเชค เชเซ เชคเซ เชกเชฟเชฐเซเชเซเชเชฐเซเชฎเชพเช tarantool เชฒเซเชจเซเช เชเชฐเซเช เชเซเช. เชชเซเชธเซเชคเชเชพเชฒเชฏเชฎเชพเชเชฅเซ เชฌเซ เชเชพเชฐเซเชฏเซ เชจเชฟเชเชพเชธ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ: เชชเซเชฐเชพเชฐเชเชญ เชเชฐเซ เช เชจเซ เชฎเชพเชฐเชตเชพ. เชชเซเชฐเชฅเชฎ เชชเชเชฒเซเช box.schema.func.create เช เชจเซ box.schema.user.grant เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชฒเซเชเชฎเชพเชเชฅเซ เช เชเชพเชฐเซเชฏเซเชจเซ เชเชชเชฒเชฌเซเชง เชเชฐเชพเชตเชตเชพเชจเซเช เชเซ. เชชเชเซ เชเช เชเชตเซ เชเชเซเชฏเชพ เชฌเชจเชพเชตเซ เชเซ เชเซเชจเชพ เชเซเชฏเซเชชเชฒเซเชธเชฎเชพเช เชซเชเซเชค เชคเซเชฐเชฃ เชซเซเชฒเซเชก เชนเชถเซ: เชชเซเชฐเชฅเชฎ เชเช เช เชจเชจเซเชฏ เชเชณเชเชเชฐเซเชคเชพ เชเซ, เชฌเซเชเซเช เชเชฎเซเชเชฒ เชเซ, เช เชจเซ เชคเซเชฐเซเชเซเช เชเซเชฏเซเชชเชฒเชจเซเช เชเซเชตเชจเชเชพเชณ เชเซ. เช เชฎเซ เชชเซเชฐเชฅเชฎ เชเซเชทเซเชคเซเชฐเชจเซ เชเซเช เชชเชฐ เชเช เชตเซเชเซเชท เช เชจเซเชเซเชฐเชฎเชฃเชฟเชเชพ เชฌเชจเชพเชตเซเช เชเซเช เช เชจเซ เชคเซเชจเซ เชชเซเชฐเชพเชฅเชฎเชฟเช เชเชนเซเช เชเซเช. เชเชเชณ เชเชชเชฃเซ เชเชชเชฃเซ เชฎเซเชณ เชฒเชพเชเชฌเซเชฐเซเชฐเซ เชธเชพเชฅเซ เชเชจเซเชเซเชถเชจ เชเชฌเซเชเซเชเซเช เชฎเซเชณเชตเซเช เชเซเช.
เชชเซเชฐเชพเชฐเชเชญเชฟเช เชเชพเชฐเซเชฏ เชชเชเซ, เชชเซเชฐเชพเชฐเชเชญ เชเชพเชฐเซเชฏ เชเชฒเชพเชตเซ:
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, '[email protected]', math.floor(fiber.time()) + 60}
box.space.tester:insert{1, '[email protected]', math.floor(fiber.time()) + 60}
box.space.tester:insert{2, '[email protected]', math.floor(fiber.time()) + 60}
เชเชพเชฒเซ เชคเชชเชพเชธเซเช เชเซ เชจเชฟเชตเซเชถ เชธเชซเชณ เชนเชคเซ:
tarantool> box.space.tester.index.primary:select()
---
- - [0, '[email protected]', 1576418976]
- [1, '[email protected]', 1576418976]
- [2, '[email protected]', 1576418976]
...
เชเชพเชฒเซ 60+ เชธเซเชเชจเซเชก เชชเชเซ เชธเชฟเชฒเซเชเซเชเชจเซ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เชเชฐเซเช (เชชเซเชฐเชฅเชฎ เชเซเชฏเซเชชเชฒเชจเชพ เชจเชฟเชตเซเชถเชจเซ เชถเชฐเซเชเชคเชฅเซ เชเชฃเชคเชฐเซ) เช เชจเซ เชเซเช เชเซ เชธเชฎเชพเชชเซเชค เชฅเชฏเซเชฒ เชฎเซเชกเซเชฏเซเชฒ เชชเชนเซเชฒเซเชฅเซ เช เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเซ เชเซเชเซเชฏเซเช เชเซ:
tarantool> box.space.tester.index.primary:select()
---
- []
...
เชเชพเชฒเซ เชเชพเชฐเซเชฏ เชฌเชเชง เชเชฐเซเช:
capped_connection:call('libcapped-expirationd.kill', {'non-indexed'})
เชเชพเชฒเซ เชฌเซเชเซเช เชเชฆเชพเชนเชฐเชฃ เชเซเชเช เชเซเชฏเชพเช เชเซเชฐเซเชฒ เชฎเชพเชเซ เช เชฒเช เช เชจเซเชเซเชฐเชฎเชฃเชฟเชเชพเชจเซ เชเชชเชฏเซเช เชฅเชพเชฏ เชเซ:
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)
เชฅเซเชกเชพ เช เชชเชตเชพเชฆเซ เชธเชพเชฅเซ, เช เชนเซเช เชฌเชงเซเช เชชเซเชฐเชฅเชฎ เชเชฆเชพเชนเชฐเชฃเชจเซ เชเซเชฎ เช เชเซ. เช เชฎเซ เชคเซเชฐเซเชเชพ เชเซเชทเซเชคเซเชฐเชจเซ เชเซเช เชชเชฐ เชเช เชตเซเชเซเชท เช เชจเซเชเซเชฐเชฎเชฃเชฟเชเชพ เชฌเชจเชพเชตเซเช เชเซเช เช เชจเซ เชคเซเชจเซ เชเชเซเชธเชช เชเชนเซเช เชเซเช. เชชเซเชฐเชพเชฅเชฎเชฟเช เชเชนเซเชตเชพเชคเชพ เชเชจเซเชกเซเชเซเชธเชฅเซ เชตเชฟเชชเชฐเซเชค เช เชเชจเซเชกเซเชเซเชธ เช เชจเชจเซเชฏ เชนเซเชตเซ เชเชฐเซเชฐเซ เชจเชฅเซ. เชเซเชฐเชพเชตเชฐเซเชธเชฒ เชเชเซเชธเชช เชเชจเซเชกเซเชเซเชธ เชฆเซเชตเชพเชฐเชพ เชนเชพเชฅ เชงเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ, เช เชจเซ เชชเซเชฐเชพเชฅเชฎเชฟเช เชฆเซเชตเชพเชฐเชพ เชเชพเชขเซ เชจเชพเชเชตเชพเชฎเชพเช เชเชตเชถเซ. เช เชฎเชจเซ เชฏเชพเชฆ เชเซ เชเซ เช เชเชพเช เชฌเชเชจเซ เชฎเชพเชคเซเชฐ เชชเซเชฐเชพเชฅเชฎเชฟเช เช เชจเซเชเซเชฐเชฎเชฃเชฟเชเชพเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเชคเชพ เชนเชคเชพ.
เชชเซเชฐเชพเชฐเชเชญเชฟเช เชเชพเชฐเซเชฏ เชชเชเซ, เช เชฎเซ เชจเชตเซ เชฆเชฒเซเชฒเซ เชธเชพเชฅเซ เชชเซเชฐเชพเชฐเชเชญ เชเชพเชฐเซเชฏ เชเชฒเชพเชตเซเช เชเซเช:
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, '[email protected]', math.floor(fiber.time()) + 60}
box.space.tester:insert{1, '[email protected]', math.floor(fiber.time()) + 60}
box.space.tester:insert{2, '[email protected]', math.floor(fiber.time()) + 60}
30 เชธเซเชเชจเซเชก เชชเชเซ, เชธเชพเชฆเซเชฐเชถเซเชฏ เชฆเซเชตเชพเชฐเชพ, เช เชฎเซ เชฅเซเชกเชพ เชตเชงเซ เชเซเชฏเซเชชเชฒเซเชธ เชเชฎเซเชฐเซเชถเซเช:
box.space.tester:insert{3, '[email protected]', math.floor(fiber.time()) + 60}
box.space.tester:insert{4, '[email protected]', math.floor(fiber.time()) + 60}
box.space.tester:insert{5, '[email protected]', math.floor(fiber.time()) + 60}
เชเชพเชฒเซ เชคเชชเชพเชธเซเช เชเซ เชจเชฟเชตเซเชถ เชธเชซเชณ เชนเชคเซ:
tarantool> box.space.tester.index.primary:select()
---
- - [0, '[email protected]', 1576421257]
- [1, '[email protected]', 1576421257]
- [2, '[email protected]', 1576421257]
- [3, '[email protected]', 1576421287]
- [4, '[email protected]', 1576421287]
- [5, '[email protected]', 1576421287]
...
เชเชพเชฒเซ 60+ เชธเซเชเชจเซเชก เชชเชเซ เชธเชฟเชฒเซเชเซเชเชจเซ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เชเชฐเซเช (เชชเซเชฐเชฅเชฎ เชเซเชฏเซเชชเชฒเชจเชพ เชจเชฟเชตเซเชถเชจเซ เชถเชฐเซเชเชคเชฅเซ เชเชฃเชคเชฐเซ) เช เชจเซ เชเซเช เชเซ เชธเชฎเชพเชชเซเชค เชฅเชฏเซเชฒ เชฎเซเชกเซเชฏเซเชฒ เชชเชนเซเชฒเซเชฅเซ เช เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเซ เชเซเชเซเชฏเซเช เชเซ:
tarantool> box.space.tester.index.primary:select()
---
- - [3, '[email protected]', 1576421287]
- [4, '[email protected]', 1576421287]
- [5, '[email protected]', 1576421287]
...
เช เชตเชเชพเชถเชฎเชพเช เชนเชเซ เชชเชฃ เชเซเชเชฒเชพเช เชเซเชฏเซเชชเชฒเซเชธ เชฌเชพเชเซ เชเซ เชเซเชจเซ เชฐเชนเซเชตเชพ เชฎเชพเชเซ เชฒเชเชญเช 30 เชตเชงเซ เชธเซเชเชจเซเชกเชจเซ เชธเชฎเชฏ เชฎเชณเชถเซ. เชคเชฆเซเชชเชฐเชพเชเชค, 2 เชจเซ ID เช เชจเซ 1576421257 เชจเซ เชเชเซเชตเชจ ID เชธเชพเชฅเซเชจเชพ เชเซเชฏเซเชชเชฒเชฎเชพเชเชฅเซ 3 เชจเซ ID เช เชจเซ 1576421287 เชจเซ เชเชเซเชตเชจ เชธเชพเชฅเซเชจเชพ เชเซเชฏเซเชชเชฒ เชชเชฐ เชเชธเซเชกเชคเซ เชตเชเชคเซ เชธเซเชเซเชจ เชฌเชเชง เชฅเช เชเชฏเซเช. 1576421287 เชเซ เชคเซเชฅเซ เชตเชงเซเชจเชพ เชเซเชตเชจเชเชพเชณ เชธเชพเชฅเซเชจเชพ เชเซเชฏเซเชชเชฒเชจเชพ เชเชฐเซเชกเชฐเชจเซ เชเชพเชฐเชฃเซ เชธเซเชเซเชจ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชจ เชนเชคเซเช. EXP เชเชจเซเชกเซเชเซเชธ เชเซเช. เช เชคเซ เชฌเชเชค เชเซ เชเซ เช เชฎเซ เชถเชฐเซเชเชคเชฎเชพเช เช เชนเชพเชเชธเชฒ เชเชฐเชตเชพ เชฎเชพเชเชคเชพ เชนเชคเชพ.
เชเชพเชฒเซ เชเชพเชฐเซเชฏ เชฌเชเชง เชเชฐเซเช:
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;
};
เชจเชพเชฎ เชตเชฟเชถเซเชทเชคเชพ เช เชเชพเชฐเซเชฏเชจเซเช เชจเชพเชฎ เชเซ. เชธเซเชชเซเชธ_เชเชเชกเซ เชเชเซเชฐเซเชฌเซเชฏเซเช เช เชเชเซเชฏเชพ เชเชณเชเชเชฐเซเชคเชพ เชเซ. rm_index_id เชตเชฟเชถเซเชทเชคเชพ เช เช เชจเชจเซเชฏ เช เชจเซเชเซเชฐเชฎเชฃเชฟเชเชพเชจเซเช เชเชณเชเชเชฐเซเชคเชพ เชเซ เชเซเชจเชพ เชฆเซเชตเชพเชฐเชพ เชเซเชฏเซเชชเชฒเซเชธ เชเชพเชขเซ เชจเชพเชเชตเชพเชฎเชพเช เชเชตเชถเซ. it_index_id เชเชเซเชฐเชฟเชฌเซเชฏเซเช เช เชเชจเซเชกเซเชเซเชธเชจเซเช เชเชณเชเชเชฐเซเชคเชพ เชเซ เชเซเชจเชพ เชฆเซเชตเชพเชฐเชพ เชเซเชฏเซเชชเชฒเซเชธ เชเซเชฐเชพเชตเชฐเซเชธ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ. it_index_type เชเชเซเชฐเชฟเชฌเซเชฏเซเช เช เชเชจเซเชกเซเชเซเชธเชจเซ เชชเซเชฐเชเชพเชฐ เชเซ เชเซเชจเชพ เชฆเซเชตเชพเชฐเชพ เชเซเชฏเซเชชเชฒเซเชธ เชเซเชฐเชพเชตเชฐเซเชธ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ. file_no เชเชเซเชฐเชฟเชฌเซเชฏเซเช เช เชเชเซเชตเชจ เชธเชพเชฅเซเชจเชพ เชเซเชฏเซเชชเชฒ เชซเซเชฒเซเชกเชจเซ เชธเชเชเซเชฏเชพ เชเซ. เชธเซเชเซเชจ_เชธเชพเชเช เชเชเซเชฐเชฟเชฌเซเชฏเซเช เช เชเช เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช เชธเซเชเซเชจ เชเชฐเซเชฒ เชเซเชฏเซเชชเชฒเซเชธเชจเซ เชฎเชนเชคเซเชคเชฎ เชธเชเชเซเชฏเชพ เชเซ. เชธเซเชเซเชจ_เชเชพเชเชฎ เชเชเซเชฐเชฟเชฌเซเชฏเซเช เช เชธเซเชเชเชกเชฎเชพเช เชชเซเชฐเซเชฃ เชธเซเชเซเชจ เชธเชฎเชฏ เชเซ.
เช
เชฎเซ เชชเชพเชฐเซเชธเชฟเชเช เชฆเชฒเซเชฒเซเชจเซ เชงเซเชฏเชพเชจเชฎเชพเช เชฒเชเชถเซเช เชจเชนเซเช. เช เชเช เชเชฆเซเชฏเชฎเซ เชชเชฐเชเชคเซ เชธเชฐเชณ เชเชพเชฎ เชเซ, เชเซเชฎเชพเช เชชเซเชธเซเชคเชเชพเชฒเชฏ เชคเชฎเชจเซ เชฎเชฆเชฆ เชเชฐเชถเซ
เช เชฎเซ เชตเชฟเชถเซเชฒเซเชทเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชเชชเชฏเซเชเชฎเชพเช เชฒเซเชตเชพเชคเชพ เชคเชฎเชพเชฎ เชเชพเชฐเซเชฏเซเชจเชพ เชชเซเชฐเซเชเซเชเชพเชเชชเซเชธเชจเซ เชธเซเชเชฟเชฌเชฆเซเชง เชเชฐเซเช เชเซเช:
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 เชซเชเชเซเชถเชจ เชเซเชฏเซเชชเชฒเชจเชพ เชเซเชตเชจเชเชพเชณเชจเซ เชคเชชเชพเชธเซ เชเซ, 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);
}
เชซเชเชเซเชถเชจ เชเซเชก expiration_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