- BaT blogja
- A hozzászóláshoz be kell jelentkezni
- 1349 megtekintés
Hozzászólások
mi ezzel a baj? extrem esetben siman elofordulhat hogy pl. a 8 egymasba agyazott konyvtarbol csak 6-ot tud megcsinalni mert mondjuk elfogytak az inode-ok
- A hozzászóláshoz be kell jelentkezni
A konkrét esetben 2 könyvtárat kellene létrehozni, ez 100 próbálkozásból nem sikerül az esetek olyan 10%-ában. Elég kellemetlen ha emiatt törik az automatizált build.
- A hozzászóláshoz be kell jelentkezni
ah, a kodot csak most neztem meg
ha ez tenyleg 10%-ban failel, az eleg gaz :S
- A hozzászóláshoz be kell jelentkezni
Igen, az mkdir(2) kabe tucatnyi hibaval terhet vissza, es ha azokat nem kezeled le normalisan akkor ez lesz belole. Ez a linkelt implementacio meg valoban fos ahhoz kepest, amennyi eset lehetseges. Ha legalabb az EEXIST-et kulonvalasztotta volna valami exception handlinggal (hamar csak bool-t kepes visszaadni). Dehat ugye nem.
- A hozzászóláshoz be kell jelentkezni
A javanak nem csak az mkdir(2)-t kell kezelnie, a fejleszto fele SEMMILYEN platform (OS )specifikus hibanak nem szabad eljutnia, hiszen absztrahaljuk a dolgot tobb platform felett. A Windows API-t erdemes megnezni, hogy ott milyen hibakodok vannak. OS X most nem kerdes, az rendes UNIX.
Win32 eseten letezik ez: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363855%28v=v…
Rekurziv mukodest ez a fuggveny nem ismer.
- A hozzászóláshoz be kell jelentkezni
Jo, de ez az "exist" dolog azert elegge platformfuggetlen ;) Marmint egy olyan rendszeren ahol "letre lehet hozni konyvtarakat", ott ertelmes az a kerdes is egyben hogy "letezik-e (letezett-e) egy adott konyvtar". Mindenhol megvan az ennek megfelelo output (altalad linkelt oldalon is ez a ERROR_ALREADY_EXISTS c. dolog). Csak kezelni kell. Az jo kerdes viszont hogy a java mit dob. A manual alapjan (lasd post) nem dob exceptiont, ha letezik a konyvtar. Java-implementacio szinten ez meg annyit jelent maximum, hogy az OS-API egynemely hibakodjat (EEXIST, ERROR_ALREADY_EXISTS) ignoralja, es ugyanugy true-val ter vissza.
- A hozzászóláshoz be kell jelentkezni
Ebből én még nem értettem meg, hogy mi az a race condition, ami miatt retry kell?
- A hozzászóláshoz be kell jelentkezni
ha parhuzamositott a build folyamat amit a kollega emlit feljebb akkor siman lehet race condition (ket szal, processz, barmi egyszerre probalja letrahozni ugyanazt, stb).
- A hozzászóláshoz be kell jelentkezni
Valójában még csak nem is párhuzamos a build. Amire tippelek, hogy a problémát nálam az okozza, hogy a konkrét task előbb letörli a könyvtárat ha létezik, majd azonnal újra létrehozza.
- A hozzászóláshoz be kell jelentkezni
Több thread esetén jöhet létre természetesen a race condition. Egy thread esetén egyszerű a helyzet: a thread megnézi, hogy létezik-e az adott könyvtár, ha nem, akkor létrehozza. Több thread esetén előfordulhat olyan eset (az OS ütemezőjétől és egyebektől függően), hogy egy threadben a könyvtár vizsgálata és a létrehozása között egy másik thread létrehozza az adott könyvtárat, így az eredeti thread hibát fog jelezni.
A fenti kódrészlet erre nyújt egy nem tökéletes megoldást azzal, hogy figyelembe veszi a race condition lehetőségét és százszor próbálkozik újra. Nem vagyok szakértő, de feltételezem elegánsabb megoldás lett volna könyvtárszerkezet létrehozásánál valamilyen global lock használata a threadek között.
- A hozzászóláshoz be kell jelentkezni
Logikailag se tudnek jobb megoldast. Ugye, letrehozod az a, a/b es valaki beleir az a/b konytarba, de az a/b/c -t mar nem tudod letrehozni. Ez van. Szerintem korrekt.
- A hozzászóláshoz be kell jelentkezni
Az a nem korrekt, hogy egyrészt erről illene egy normális exceptiont dobni, másrészt az én esetemben ilyenről szó nincs, mégsem sikerül létrehozni a könyvtárat.
- A hozzászóláshoz be kell jelentkezni
Oké, de akkor a hiba a JRE-ben (vagy az alatt az oprendszerben) van, tehát annak a kódját kellene megnézni. A Scala workaroundja csak arra jó, hogy lássuk, van itt egy ismert hiba, nem?
- A hozzászóláshoz be kell jelentkezni
Ez mondjuk igaz :)
- A hozzászóláshoz be kell jelentkezni
Szerintem rossz iranybol nezed a dolgot (plane fejlesztokent).
Az open source remek lehetoseg arra, hogy _kijavitsd_ a kodot, ha eleg sokaig szivsz vele...
- A hozzászóláshoz be kell jelentkezni
Most épp az üzemeltető kalap volt rajtam (mivel ez egy üzemeltetési probléma). ;)
- A hozzászóláshoz be kell jelentkezni
Mondjuk a java.io.File amúgy is eléggé elavult. Helyette van a nio.file API Java 7-től.
- A hozzászóláshoz be kell jelentkezni
Oke, de a Scalaba jarnak 1.6 userek is vasarolni...
--
Blog | @hron84
Üzemeltető macik
- A hozzászóláshoz be kell jelentkezni