Dscope: Bulutli server tizimlarida haqiqiy ma'lumotlarning buzilishini aniqlash
Download 0.68 Mb. Pdf ko'rish
|
dscope SOCC18
4
java.nio 1 yoki interfeyslar java.util 2 Preks sinfi 1 DataInput oilasi Fayl InputStream oilasi Reader oilasi Buer oilasi kanallari. Kanallar oilasi Iterator, Roÿyxat roÿyxati, Navbat, Set, StringTokenizer 12 java.io 10 8 ' . 135 i 3 2 = i 2 7 + 1 535 o'tish ÿ 531 qator / / S oot IR 127 $b6 = i 1 cmp i 0 128 agar $b6 >= 0 boÿlsa ÿ139 qatorga oÿtish / / i 0 istheu ppe r bogÿlangan 136 i 3 7 = i 3 2 + 1 // i 1 istheloopind ex 129 . . . 130 i 7 = i 1 + 1 / / S oot IR 530 $ i 5 = r 1 531 agar i 1 >= $ i 5 oÿtish liniyasi #536 / / i 1 istheloopind ex 532 $ i 9 = $ i 9 isthestrid 533 i 1 = i 1 + $ i 9 131 i 1 2 = i 7 + 1 < B yte B uffer : limit > / / $ i 5 istheu ppe r bog'langan 132 i 1 7 = i 1 2 + 1 133 i 2 2 = i 1 7 + 1 saretestridlar 134 i 2 7 = i 2 2 + 1 137 i 1 = i 3 7 + 1 / / hammasi 1 138 o'tish qatori ÿ127 . . . Machine Translated by Google #HDFSÿ5438( v0 . 2 3 . 0 ) . . . 1689 } 1667 boo lean fayl C omplete = noto'g'ri ; 1668 wh i le (! C fayli to'liq) { C fayli to'liq = dfs C lient. nom tugunlari. c om pl ete (srcdfs C lient. clien tName last ); // DFSO u tpu tS t ream. jav a 1665 xususiy vo id F ile (Ex tende dBl ock oxirgi ) { 1669 . . . , . . . Fayl Chegaralarni tekshiring Indeksni tiklash o'qish* o'qing - pop - ip chegarasi aniq aniq qo'shing - Teskari indeks aniq yangi - yangi bor* yaratmoq* DataInput oilasi qolgan* - - yangi yangi yozish - Stak yangi 10-rasm: HDFS-5438 xatosining kod qismi. ExtendedBlock oxirgi buzilganda fileComplete o'zgaruvchisi hech qachon rost bo'lmaydi va bu DFSOutputStream da innite sikliga sabab bo'ladi. pozitsiya olish* qo'yish* Roÿyxat va oÿrnatish so'rov - Durang Keyingisi olish* o'qish* Buer oilasi yangi yangi yangi Keyingi StringTokenizer InputStream pozitsiya bu* Navbat pop Chegaralarni yangilash yangi yangi yangi Kanallar oilasi qo'shish iterator elementlari Sinf o'qish* yangi o'qing olib tashlash Takrorlovchi & API turlari va nomi & Kitobxonlar oilasi dublikat ajratish yangisini olib tashlang - bor*, bor* mumkin, olish* o'qish* yangi oer - bo'sh yangi qayta o'rnatish so'rov Oldinga indeks qayta o'rnatish yozish olib tashlash Ro'yxatga olish bor* , - - DFSOutputStream, blokirovka qilish jarayonining to'liqligini tekshirish uchun NameNode so'rovini davom ettiradi (1669-qator). Oxirgi blok buzilganda, NameNode uni diskka kirita olmaydi, lekin uning o'rniga false qaytaradi . Bu DFSOutputStream-da dasturiy ta'minotni osib qo'yishiga olib keladigan innite tsikliga (1668-1689 qator) olib keladi . DScope bu holatni kesadi, chunki sikl yo‘llari 2-jadvaldagi Java API-larini chaqirmaydi. Aslida, sikl yo‘li faqat maxsus dastur funksiyasini, ya’ni complete() ni chaqiradi. DScope protseduralararo tahlilni qo'shgandan keyin ushbu xatoni aniqlay olishi kerak, ammo bu ish doirasidan tashqarida. 2-jadval: 60 ta tez-tez ishlatiladigan Java sinflari va interfeyslarida pastadir va bog'langan yangilanish bilan bog'liq API'lar. "*": API to'plami shunga o'xshash operatsiyalarni bajaradi; va "-": tegishli turdagi APIlarni o'z ichiga olmaydi. API yoki "teskari indeks" API chaqiriladi; 2) "qayta tiklash indeksi" API va "yangilash chegaralari" API'lari chaqirilmaydi; va 3) chiqish shartlarida “check bounds” API’lari chaqiriladi. E'tibor bering, DScope "oldinga ko'rsatkich" API va "teskari indeks" API'lari tsikl yo'llarida chaqirilgan holatlarni kesib bo'lmaydi, chunki tsikl qadamining har doim ijobiy yoki salbiy bo'lishini kafolatlab bo'lmaydi. Ve toifalaridagi API'lar tsikl indeksini yoki chegaralarini o'zgartirishi shart emas. DScope noto'g'ri musbat filtrlashni amalga oshirganda, ushbu API argumentlarini ham hisobga olish kerak. Masalan, ByteBuffer nisbiy yoki mutlaq atributga ega bo'lgan ortiqcha yuklash usullarini o'z ichiga oladi. ByteBuffer.get () nisbiy usul, ByteBuffer.get(int) esa mutlaq usul. Nisbiy usulni chaqirish tsikl indeksini (ya'ni, ByteBuffer.position) o'zgartirishi mumkin , mutlaq usullarni chaqirish esa mumkin emas. To'g'ri kesishga erishish uchun DScope rst barcha keng tarqalgan Java API-lariga o'zgartirish-musbat, o'zgartirish salbiy yoki o'zgartirish-mumkin atributlari bilan izoh beradi. Ijobiy APIlar tsikl indeksini (yoki chegaralarini) o'zgartirishi mumkin. Salbiy API ikkalasini ham o'zgartira olmaydi. Loop total() funksiyasida joylashadi , STEP_LENGTH esa sinf ishga tushirgichida belgilangan statik o‘zgaruvchidir. DScope sinfni ishga tushiruvchidan STEP_LENGTH qiymatini olish uchun ma'lumotlar tahlilini amalga oshiradi va keyin bosqichning ijobiy ekanligini tekshiradi, chunki tsikl indeksi yuqori chegaraga ega. Yana bir misol InputStream sinfidir. Input Stream.read(byte[], int, int) ni nol o'lchamli bayt massivi yoki uchinchi parametr sifatida 0 bilan chaqirish tsikl indeksini o'zgartira olmaydi. Mumkin bo'lgan API'lar pastadir indeksini (yoki chegaralarini) o'zgartirishi mumkin. Download 0.68 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling