Temporary resource — dastur yoki test bajarilishi davomida qisqa muddatga yaratiladigan va ish tugagach bo‘shatilishi kerak bo‘lgan resurs. Vaqtinchalik fayl, katalog, port, database sxemasi, cloud instance, lock va xotira bu turga kiradi. “Vaqtinchalik” atamasi resursning avtomatik yo‘qolishini emas, uning lifecycle’i cheklanganini anglatadi.
Lifecycle
Resurs bilan ishlash odatda acquire–use–release ketma-ketligiga ega. Acquire bosqichida noyob nom yoki handle olinadi; use bosqichida resurs amaliy vazifani bajaradi; release bosqichida u yopiladi, o‘chiriladi yoki poolga qaytariladi. Xato yuz bersa ham release bajarilishi kerak.
Ko‘p tillarda bu tartib maxsus konstruksiya bilan ifodalanadi. Python’dagi context manager misoli:
from tempfile import TemporaryDirectory
with TemporaryDirectory() as path:
build_project(path)
# blokdan chiqishda katalog tozalanadi
finally, RAII, defer, try-with-resources va disposable obyektlar bir xil lifecycle muammosini turli usulda hal qiladi.
Fayl va kataloglar
Temporary faylni oddiy taxmin qilinadigan nom bilan yaratish xavfli. Boshqa jarayon shu nomni oldindan band qilishi yoki symbolic link orqali yozishni boshqa manzilga yo‘naltirishi mumkin. Operatsion tizimning atomik temporary-file API’si tasodifiy, faqat joriy foydalanuvchiga ochiq fayl yaratadi va handle qaytaradi.
Temporary katalogning joyi ham muhim. Katta build artefakti kichik tizim partitionini to‘ldirishi mumkin; maxfiy ma’lumot umumiy katalogda noto‘g‘ri permission bilan qolmasligi kerak. Fayl nomini keyin ochish o‘rniga yaratilgan file descriptor’dan foydalanish time-of-check/time-of-use poygasini kamaytiradi.
Test infratuzilmasi
Integration testlar container, message queue, database yoki alohida tenant yaratishi mumkin. Har testga izolyatsiyalangan resurs berilishi parallel bajarilishdagi to‘qnashuvni oldini oladi. Resurs nomida run identifikatori bo‘lishi cleanup va auditni osonlashtiradi.
Test jarayoni majburan to‘xtasa odatiy teardown ishlamasligi mumkin. Shu sababli tashqi resurslarga TTL, owner yorlig‘i va keyingi garbage-collector jarayoni qo‘shiladi. Masalan, cloud resurs expires_at tegiga qarab o‘chiriladi. TTL faol ishni muddatidan oldin to‘xtatmasligi uchun yangilanish mexanizmi ham kerak bo‘lishi mumkin.
Resurs turlari va bo‘shatish
| Resurs | Release amali |
|---|---|
| Fayl handle | Yopish |
| Temporary fayl | Yopish va o‘chirish |
| TCP port/socket | Socketni yopish |
| Lock | Unlock qilish |
| Database transaction | Commit yoki rollback |
| Cloud instance | Delete yoki terminate |
Memory garbage collection obyekt xotirasini qaytarishi mumkin, ammo ochiq fayl, lock yoki tashqi instance’ni o‘z vaqtida bo‘shatishga kafolat bermaydi. Deterministik cleanup shuning uchun alohida yoziladi.
Xatolik va idempotent cleanup
Cleanup qisman yaratilgan resursni ham taniydi. Masalan, database yaratilib, migration muvaffaqiyatsiz tugasa, tozalash kodi migration tugagan deb faraz qilmasligi kerak. Release amali takror chaqirilganda zarar bermaydigan idempotent shaklda bo‘lsa, retry xavfsizlashadi.
Asosiy operatsiya va cleanup bir vaqtda xato qilishi mumkin. Dastur asosiy xatoni yo‘qotmasdan cleanup xatosini ham log yoki exception chain orqali saqlaydi. Aks holda asl sabab tozalashdagi ikkilamchi xato bilan almashtiriladi.
Kuzatuv va limitlar
Temporary resurslar nazoratsiz qolsa disk to‘lishi, file descriptor tugashi, port bandligi yoki cloud xarajati yuzaga keladi. Metrikalar faol resurslar soni, yoshi va cleanup muvaffaqiyatsizligini ko‘rsatadi. Kvota bir foydalanuvchi yoki test run’ning butun tizim resursini egallashiga to‘sqinlik qiladi.
Logda resurs identifikatori va owner ko‘rsatiladi, lekin fayldagi maxfiy mazmun yozilmaydi. Cleanup siyosati audit talablariga zid ravishda zarur dalillarni o‘chirib yubormasligi uchun temporary artefakt bilan diagnostik artefakt alohida tasniflanadi.
Bog‘liq tushunchalar
Resource management, Cleanup, Teardown, Context manager, RAII, Garbage collection, Time to live