āĻŸā§āĻ¯āĻžāĻ°āĻžāĻ¨ā§āĻŸā§āĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ•ā§āĻ¯āĻžāĻĒāĻĄ āĻŽā§‡āĻ¯āĻŧāĻžāĻĻā§‹āĻ¤ā§āĻ¤ā§€āĻ°ā§āĻŖ āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻ˛ā§‡āĻ–āĻž

āĻŸā§āĻ¯āĻžāĻ°āĻžāĻ¨ā§āĻŸā§āĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ•ā§āĻ¯āĻžāĻĒāĻĄ āĻŽā§‡āĻ¯āĻŧāĻžāĻĻā§‹āĻ¤ā§āĻ¤ā§€āĻ°ā§āĻŖ āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻ˛ā§‡āĻ–āĻž

āĻ•āĻŋāĻ›ā§ āĻ¸āĻŽāĻ¯āĻŧ āĻ†āĻ—ā§‡ āĻ†āĻŽāĻ°āĻž āĻĢāĻžāĻāĻ•āĻž āĻœāĻžāĻ¯āĻŧāĻ—āĻžāĻ¯āĻŧ āĻŸāĻŋāĻĒāĻ˛ āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸āĻŽā§āĻŽā§āĻ–ā§€āĻ¨ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ āĻŸā§āĻ¯āĻžāĻ°āĻžāĻ¨ā§āĻŸā§āĻ˛. āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻ•āĻ°āĻž āĻļā§āĻ°ā§ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤ āĻ›āĻŋāĻ˛ āĻ¯āĻ–āĻ¨ āĻŸā§āĻ¯āĻžāĻ°āĻžāĻ¨ā§āĻŸā§āĻ˛ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻŽā§‡āĻŽāĻ°āĻŋ āĻĢā§āĻ°āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻšā§āĻ›ā§‡, āĻ¤āĻŦā§‡ āĻ†āĻ—ā§‡ āĻĨā§‡āĻ•ā§‡ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻĢā§āĻ°āĻŋāĻ•ā§‹āĻ¯āĻŧā§‡āĻ¨ā§āĻ¸āĻŋāĻ¤ā§‡āĨ¤ āĻāĻ‡ āĻ•āĻžāĻœā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻŸā§āĻ¯āĻžāĻ°āĻžāĻ¨ā§āĻŸā§āĻ˛ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž āĻ˛ā§āĻ¯āĻŧāĻžāĻ¤ā§‡ āĻ˛ā§‡āĻ–āĻž āĻ†āĻ›ā§‡ āĻŽā§‡āĻ¯āĻŧāĻžāĻĻ. āĻ…āĻ˛ā§āĻĒ āĻ¸āĻŽāĻ¯āĻŧā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ‡ āĻŽāĻĄāĻŋāĻ‰āĻ˛āĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡, āĻ†āĻŽāĻ°āĻž āĻŦā§āĻāĻ¤ā§‡ āĻĒā§‡āĻ°ā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ āĻ¯ā§‡ āĻāĻŸāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ‰āĻĒāĻ¯ā§āĻ•ā§āĻ¤ āĻ¨āĻ¯āĻŧ: āĻĒā§āĻ°āĻšā§āĻ° āĻĒāĻ°āĻŋāĻŽāĻžāĻŖā§‡ āĻĄā§‡āĻŸāĻž āĻ•ā§āĻ°āĻŽāĻžāĻ—āĻ¤ āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ•āĻžāĻ°āĻŖā§‡, āĻ˛ā§āĻ¯āĻŧāĻž āĻœāĻŋāĻ¸āĻŋāĻ¤ā§‡ āĻā§āĻ˛ā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻ…āĻ¤āĻāĻŦ, āĻ†āĻŽāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ•ā§āĻ¯āĻžāĻĒāĻĄ āĻŽā§‡āĻ¯āĻŧāĻžāĻĻā§‹āĻ¤ā§āĻ¤ā§€āĻ°ā§āĻŖ āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻ•āĻĨāĻž āĻ­ā§‡āĻŦā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ, āĻāĻ‡ āĻ†āĻļāĻžāĻ¯āĻŧ āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨ā§‡āĻŸāĻŋāĻ­ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāĻˇāĻžāĻ¯āĻŧ āĻ˛ā§‡āĻ–āĻž āĻ•ā§‹āĻĄāĻŸāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸āĻ°ā§āĻŦā§‹āĻ¤ā§āĻ¤āĻŽ āĻ‰āĻĒāĻžāĻ¯āĻŧā§‡ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻŦā§‡āĨ¤

āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ˛ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ›āĻŋāĻ˛ āĻŸā§āĻ¯āĻžāĻ°āĻžāĻ¨ā§āĻŸā§āĻ˛ āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻ¨āĻžāĻŽāĻ• memcached. āĻāĻŸāĻŋāĻ¤ā§‡ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻāĻ‡ āĻ¸āĻ¤ā§āĻ¯ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ āĻ¯ā§‡ āĻ¸ā§āĻĨāĻžāĻ¨āĻŸāĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§ƒāĻĨāĻ• āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ° āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¯āĻž āĻŸāĻŋāĻĒāĻ˛ā§‡āĻ° āĻœā§€āĻŦāĻ¨āĻ•āĻžāĻ˛ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°ā§‡, āĻ…āĻ¨ā§āĻ¯ āĻ•āĻĨāĻžāĻ¯āĻŧ, ttlāĨ¤ āĻŦā§āĻ¯āĻžāĻ•āĻ—ā§āĻ°āĻžāĻ‰āĻ¨ā§āĻĄā§‡āĻ° āĻŽāĻĄāĻŋāĻ‰āĻ˛āĻŸāĻŋ āĻ¸ā§āĻĒā§‡āĻ¸ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨ āĻ•āĻ°ā§‡, āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ¸āĻŽāĻ¯āĻŧā§‡āĻ° āĻ¸āĻžāĻĨā§‡ TTL āĻ¤ā§āĻ˛āĻ¨āĻž āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻŸāĻŋāĻĒāĻ˛ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻŦā§‡ āĻ•āĻŋ āĻ¨āĻž āĻ¤āĻž āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨ā§‡āĻ¯āĻŧāĨ¤ memcached āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻ•ā§‹āĻĄ āĻ¸āĻšāĻœ āĻāĻŦāĻ‚ āĻŽāĻžāĻ°ā§āĻœāĻŋāĻ¤, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ–ā§āĻŦ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ. āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻāĻŸāĻŋ āĻ•ā§āĻ°āĻ˛ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻž āĻ¸ā§‚āĻšāĻ•ā§‡āĻ° āĻ§āĻ°āĻŖāĻ•ā§‡ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°ā§‡ āĻ¨āĻžāĨ¤ āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧāĻ¤, āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻĒāĻžāĻ¸ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŸāĻŋāĻĒāĻ˛ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻžāĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻŦā§‡āĻļ āĻŦāĻĄāĻŧ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻŽā§‡āĻ¯āĻŧāĻžāĻĻā§‹āĻ¤ā§āĻ¤ā§€āĻ°ā§āĻŖ āĻŽāĻĄāĻŋāĻ‰āĻ˛ā§‡ āĻĒā§āĻ°āĻĨāĻŽ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻŸāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ (āĻ—āĻžāĻ›ā§‡āĻ° āĻ¸ā§‚āĻšāĻ•āĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒā§ƒāĻĨāĻ• āĻļā§āĻ°ā§‡āĻŖāĻŋāĻ¤ā§‡ āĻŦāĻŋāĻ­āĻ•ā§āĻ¤ āĻ›āĻŋāĻ˛), āĻ¤āĻŦā§‡ āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧāĻŸāĻŋ āĻāĻ–āĻ¨āĻ“ āĻ•ā§‹āĻ¨āĻ“ āĻŽāĻ¨ā§‹āĻ¯ā§‹āĻ— āĻĒāĻžāĻ¯āĻŧāĻ¨āĻŋāĨ¤ āĻāĻ‡ āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ†āĻŽāĻžāĻ° āĻ¨āĻŋāĻœā§‡āĻ° āĻ•ā§‹āĻĄ āĻ˛ā§‡āĻ–āĻžāĻ° āĻĒāĻ•ā§āĻˇā§‡ āĻĒāĻ›āĻ¨ā§āĻĻāĻŸāĻŋ āĻĒā§‚āĻ°ā§āĻŦāĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŋāĻ¤ āĻ•āĻ°ā§‡āĻ›ā§‡āĨ¤

āĻŦāĻŋāĻŦāĻ°āĻŖ

āĻŸā§āĻ¯āĻžāĻ°āĻžāĻ¨ā§āĻŸā§āĻ˛ā§‡āĻ° āĻĄāĻ•ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨ āĻ–ā§āĻŦ āĻ­āĻžāĻ˛ā§‹ āĻŸāĻŋāĻ‰āĻŸā§‹āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ¸āĻŋ-āĻ¤ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŋāĻ¤ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ˛āĻŋāĻ–āĻŦā§‡āĻ¨ āĻ¸ā§‡ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡āĨ¤ āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻ†āĻŽāĻŋ āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻšā§āĻ›āĻŋ āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¨ā§€āĻšā§‡ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻāĻŦāĻ‚ āĻ•ā§‹āĻĄ āĻ¸āĻš āĻ¸ā§‡āĻ‡ āĻ¸āĻ¨ā§āĻ¨āĻŋāĻŦā§‡āĻļāĻ—ā§āĻ˛āĻŋ āĻŦā§‹āĻāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻŸāĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¨āĻŋāĻœā§‡āĻ•ā§‡ āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨āĨ¤ āĻāĻŸāĻŋ āĻŽāĻ¨ā§‹āĻ¯ā§‹āĻ— āĻĻāĻŋāĻ¤ā§‡ āĻŽā§‚āĻ˛ā§āĻ¯āĻ“ āĻ°ā§‡āĻĢāĻžāĻ°ā§‡āĻ¨ā§āĻ¸ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ•ā§āĻ¯āĻžāĻĒāĻĄ āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻ˛ā§‡āĻ–āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻŦāĻ¸ā§āĻ¤ā§āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡, āĻ¯āĻĨāĻž āĻŦāĻ•ā§āĻ¸, āĻ¤āĻ¨ā§āĻ¤ā§, āĻ¸ā§‚āĻšāĻ• и txn.

āĻ†āĻ¸ā§āĻ¨ āĻĻā§‚āĻ° āĻĨā§‡āĻ•ā§‡ āĻļā§āĻ°ā§ āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ¯āĻžāĻĒāĻĄ āĻŽā§‡āĻ¯āĻŧāĻžāĻĻā§‹āĻ¤ā§āĻ¤ā§€āĻ°ā§āĻŖ āĻŽāĻĄāĻŋāĻ‰āĻ˛āĻŸāĻŋ āĻŦāĻžāĻ‡āĻ°ā§‡ āĻĨā§‡āĻ•ā§‡ āĻ•ā§‡āĻŽāĻ¨ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ āĻ¤āĻž āĻĻā§‡āĻ–ā§āĻ¨:

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 āĻāĻ° āĻœā§€āĻŦāĻ¨āĻ•āĻžāĻ˛ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻŸāĻŋāĻ‰āĻĒāĻ˛ āĻĨā§‡āĻ•ā§‡ 1576421257 āĻāĻ° āĻ†āĻ‡āĻĄāĻŋ āĻāĻŦāĻ‚ 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;
};

āĻ¨āĻžāĻŽ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯ āĻŸāĻžāĻ¸ā§āĻ•ā§‡āĻ° āĻ¨āĻžāĻŽāĨ¤ āĻ¸ā§āĻĒā§‡āĻ¸_āĻ†āĻ‡āĻĄāĻŋ āĻ…ā§āĻ¯āĻžāĻŸā§āĻ°āĻŋāĻŦāĻŋāĻ‰āĻŸ āĻšāĻ˛ āĻ¸ā§āĻĒā§‡āĻ¸ āĻ†āĻ‡āĻĄā§‡āĻ¨ā§āĻŸāĻŋāĻĢāĻžāĻ¯āĻŧāĻžāĻ°āĨ¤ rm_index_id āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯āĻŸāĻŋ āĻ…āĻ¨āĻ¨ā§āĻ¯ āĻ¸ā§‚āĻšāĻ•ā§‡āĻ° āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤āĻ•āĻžāĻ°ā§€ āĻ¯āĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻŸāĻŋāĻĒāĻ˛āĻ—ā§āĻ˛āĻŋ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻž āĻšāĻŦā§‡āĨ¤ it_index_id āĻ…ā§āĻ¯āĻžāĻŸā§āĻ°āĻŋāĻŦāĻŋāĻ‰āĻŸ āĻšāĻ˛ āĻ¸ā§‚āĻšāĻ•ā§‡āĻ° āĻļāĻ¨āĻžāĻ•ā§āĻ¤āĻ•āĻžāĻ°ā§€ āĻ¯āĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻŸāĻŋāĻĒāĻ˛āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ…āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤ it_index_type āĻ…ā§āĻ¯āĻžāĻŸā§āĻ°āĻŋāĻŦāĻŋāĻ‰āĻŸ āĻšāĻ˛ āĻ¸ā§‚āĻšāĻ•ā§‡āĻ° āĻ§āĻ°āĻ¨ āĻ¯āĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻŸāĻŋāĻĒāĻ˛āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ…āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤ file_no āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯ āĻšāĻ˛ āĻ˛āĻžāĻ‡āĻĢāĻŸāĻžāĻ‡āĻŽ āĻ¸āĻš tuple āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĨ¤ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨_āĻ¸āĻžāĻ‡āĻœ āĻ…ā§āĻ¯āĻžāĻŸā§āĻ°āĻŋāĻŦāĻŋāĻ‰āĻŸ āĻšāĻ˛ āĻ¸āĻ°ā§āĻŦā§‹āĻšā§āĻš āĻ¸āĻ‚āĻ–ā§āĻ¯āĻ• āĻŸāĻŋāĻĒāĻ˛ āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨_āĻŸāĻžāĻ‡āĻŽ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯āĻŸāĻŋ āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨ āĻ¸āĻŽāĻ¯āĻŧāĨ¤

āĻ†āĻŽāĻ°āĻž āĻĒāĻžāĻ°ā§āĻ¸āĻŋāĻ‚ āĻ†āĻ°ā§āĻ—ā§āĻŽā§‡āĻ¨ā§āĻŸ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°āĻŦ āĻ¨āĻžāĨ¤ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻļā§āĻ°āĻŽāĻ¸āĻžāĻ§ā§āĻ¯ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¸āĻšāĻœ āĻ•āĻžāĻœ, āĻ¯āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻŦā§‡ msgpuck. āĻ…āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ—ā§āĻ˛āĻŋ āĻ•ā§‡āĻŦāĻ˛āĻŽāĻžāĻ¤ā§āĻ° āĻ¸ā§‡āĻ‡ āĻ¸ā§‚āĻšā§€āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻĻā§‡āĻ–āĻž āĻĻāĻŋāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¯ā§‡āĻ—ā§āĻ˛āĻŋ mp_map āĻŸāĻžāĻ‡āĻĒā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻœāĻŸāĻŋāĻ˛ āĻĄā§‡āĻŸāĻž āĻ¸ā§āĻŸā§āĻ°āĻžāĻ•āĻšāĻžāĻ° āĻšāĻŋāĻ¸āĻžāĻŦā§‡ Lua āĻĨā§‡āĻ•ā§‡ āĻĒāĻžāĻ¸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ 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);

āĻāĻ–āĻ¨ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻŦāĻŋāĻˇāĻ¯āĻŧā§‡āĻ° āĻĻāĻŋāĻ•ā§‡ āĻ¯āĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ• - āĻ¸ā§āĻĨāĻžāĻ¨ āĻŦāĻžāĻ‡āĻĒāĻžāĻ¸ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻŸāĻŋāĻĒāĻ˛āĻ¸ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻžāĻ° āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĨ¤ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨_āĻ¸āĻžāĻ‡āĻœā§‡āĻ° āĻšā§‡āĻ¯āĻŧā§‡ āĻŦāĻĄāĻŧ āĻ¨āĻ¯āĻŧ āĻŸāĻŋāĻĒāĻ˛ā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻŦā§āĻ˛āĻ• āĻāĻ•āĻŸāĻŋ āĻāĻ•āĻ• āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡āĻ° āĻ…āĻ§ā§€āĻ¨ā§‡ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨ āĻāĻŦāĻ‚ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¯āĻĻāĻŋ āĻ¸āĻĢāĻ˛ āĻšāĻ¯āĻŧ, āĻāĻ‡ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨āĻŸāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋāĻŦāĻĻā§āĻ§ āĻšāĻ¯āĻŧ; āĻ¯āĻĻāĻŋ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ˜āĻŸā§‡ āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ āĻĢāĻŋāĻ°āĻŋāĻ¯āĻŧā§‡ āĻ†āĻ¨āĻž āĻšāĻ¯āĻŧāĨ¤ 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

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨