abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 22:00 | Nasazení Linuxu
Stabilní aktualizace Chrome OS 69 (resp. Chromium OS), konkrétně 69.0.3497.95, přináší mj. podporu linuxových aplikací. Implementována je pomocí virtualizace, a proto je tato funkce také omezena na zařízení s dostatkem paměti a podporou hardwarové akcelerace, tudíž nejsou podporovány chromebooky s 32bitovými architekturami ARM, či Intel Bay Trail (tzn. bez Intel VT-x).
Fluttershy, yay! | Komentářů: 0
včera 21:32 | Zajímavý projekt
Došlo k uvolnění linuxové distribuce CLIP OS, vyvíjené francouzským úřadem pro kybernetickou bezpečnost ANSSI, jako open source. Vznikla za účelem nasazení v úřadech, kde je potřeba omezit přístup k důvěrným datům. Je založená na Gentoo.
Fluttershy, yay! | Komentářů: 0
včera 16:00 | Komerce

Zjistěte více o bezpečné a flexibilní architektuře v cloudu! IBM Cloud poskytuje bezpečné úložiště pro Vaše obchodní data s možností škálovatelnosti a flexibilitou ukládání dat. Zároveň nabízí prostředky pro jejich analýzu, vizualizaci, reporting a podporu rozhodování.

… více »
Fluttershy, yay! | Komentářů: 12
včera 12:22 | Nová verze

V dubnu letošního roku Mozilla představila webový prohlížeč pro rozšířenou a virtuální realitu Firefox Reality (GitHub). V úterý oznámila vydání verze 1.0. Ukázka na YouTube. Firefox Reality je k dispozici pro Viveport, Oculus a Daydream.

Ladislav Hagara | Komentářů: 2
včera 12:00 | Komunita

V srpnu loňského roku společnost Oracle oznámila, že Java EE (Enterprise Edition) bude uvolněna jako open source. O měsíc později bylo rozhodnuto, že tato open source Java EE bude přejmenována a předána Eclipse Foundation. Nové jméno bylo oznámeno v únoru letošního roku. Z Java EE se stala Jakarta EE. Eclipse Foundation včera oznámila dosažení dalšího milníku. Zdrojové kódy aplikačního serveru GlassFish jsou již k dispozici v git repozitářích Eclipse Foundation (GitHub).

Ladislav Hagara | Komentářů: 0
19.9. 23:55 | Komunita

LTS (Long Term Support) podpora Ubuntu 12.04 LTS (Precise Pangolin) skončila po 5 letech od jeho vydání, tj. v dubnu 2017. V březnu 2017 ale Canonical představil placenou ESM (Extended Security Maintenance) podporu, díky které je Ubuntu 12.04 podporováno do dubna 2020. Dnes Canonical potvrdil ESM podporu také pro Ubuntu 14.04 LTS (Trusty Tahr), jehož LTS podpora skončí v dubnu 2019.

Ladislav Hagara | Komentářů: 0
19.9. 15:00 | Nová verze

Byla vydána verze 3.0.0 frameworku pro vývoj multiplatformních desktopových aplikací pomocí HTML, CSS a JavaScriptu Electron (YouTube, GitHub). Electron byl původně vyvíjen pro editor Atom pod názvem Atom Shell. Dnes je na Electronu postavena celá řada dalších aplikací.

Ladislav Hagara | Komentářů: 0
19.9. 14:44 | Nová verze

Po půl roce vývoje od vydání verze 6.0.0 byla vydána verze 7.0.0 překladačové infrastruktury LLVM (Wikipedie). Přehled novinek v poznámkách k vydání: LLVM, Clang, clang-tools-extra a LLD.

Ladislav Hagara | Komentářů: 0
19.9. 13:44 | Nová verze

Byla vydána verze 3.0.0 knihovny pro vykreslování grafů v programovacím jazyce Python Matplotlib (Wikipedie, GitHub). Přehled novinek a galerie grafů na stránkách projektu. Zrušena byla podpora Pythonu 2.

Ladislav Hagara | Komentářů: 0
19.9. 00:22 | Komunita

V Norimberku probíhá do pátku ownCloud conference 2018, tj. konference vývojářů a uživatelů open source systému ownCloud (Wikipedie) umožňujícího provoz vlastního cloudového úložiště. Přednášky lze sledovat online. Videozáznamy jsou k dispozici na YouTube. Při této příležitosti byl vydán ownCloud Server 10.0.10. Z novinek lze zdůraznit podporu PHP 7.2. Vydán byl také ownCloud Desktop Client 2.5.0. Vyzkoušet lze online demo ownCloudu.

Ladislav Hagara | Komentářů: 1
Na optické médium (CD, DVD, BD aj.) jsem naposledy vypaloval(a) data před méně než
 (13%)
 (15%)
 (20%)
 (23%)
 (25%)
 (4%)
 (1%)
Celkem 376 hlasů
 Komentářů: 33, poslední 16.9. 11:55
Rozcestník

libasyncns a testování

4.11.2014 15:28 | Přečteno: 1070× | linux/unix | Výběrový blog | poslední úprava: 7.11.2014 23:03

Lennart před časem napsal knihovnu s asynchronními verzemi getaddrinfo(), getnameinfo(), res_query() a res_search() za pomoci standardních libc funkcí a vláken. Pokud jsou moje informace správné, tak by měla být dnes pohlcena systemd. Sám jsem se zatím dostal k prozkoumání té originální.

Dostal jsem se k tomu v rámci dolaďování knihovny netresolve, která vedle základní funkcionality umožňuje využívat různé speciální backendy a stejnětak poskytuje vedle vlastného API i frontendy implementující jiná známá API. V rámci knihovny netresolve lze použít asyncns API jako backend i jako frontend. Frontend vypadá tak, že netresolve-asyncns.so implementuje celé API a jde buď linkovat namísto libasyncns a nebo podsunout hotovému programu pomocí utility wrapresolve, která nedělá nic jiného než že nastaví LD_PRELOAD na seznam podobných frontendů, které netresolve poskytuje.

Nedávno z googlu záhadně zmizela dokumentace k asyncns a generovaná dokumentace v rámci zdrojáků nevypadá moc funkční, takže se řídím převážně obsahem hlavičkového souboru, kde jsou funkce přecijen nějak okomentované. Osobně celé API chápu tak, že si pomocí asyncns_new() vytvořím asyncns_t, který na pozadí vytvoří pool vláken, a přes tento objekt pak posílám dotazy (například pomocí asyncns_getaddrinfo()) s možností ponechat si asyncns_query_t, přes který se můžu ptát na stav dotazů v případě potřeby. Dále od asyncns_t získám souborový deskriptor, který zapojím do svého event loopu a pokaždé, když je připravený, zavolám asyncns_wait() s volbou block = 0 a pomocí asyncns_getnext() vyzvednu první odpověď.

V případě více dotazů předpokládám, že se API bude používat tak, že po každém neblokujícím volání asyncns_wait() bude následovat asyncns_getnext() a zpracování příchozí odpovědi. Na to už pokud vím žádná dokumentace není, příklady použití taky ne a test ve zdrojovém stromu libasyncns je nedostačující, takže můžu jenom hádat. Osobně bych si představoval, že budu asyncns_getnext() volat tak dlouho, dokud nevrátí NULL a po každém volání výsledek celý zpracuju a zruším. No a pak je tu možnost zrušení dotazu asyncns_cancel(). To všechno je obsahem násoedujícího testu (jehož průběžně aktualizovanou verzi najdete v gitu).
#include <asyncns.h>
#include <poll.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <stdbool.h>
#include <unistd.h>
int
main(int argc, char **argv)
{
        asyncns_t *asyncns;
        asyncns_query_t *query;
        struct addrinfo *result;
        struct pollfd pollfd = { .events = POLLIN };
        int status;
        asyncns = asyncns_new(10);
        assert(asyncns);
        assert(asyncns_getnqueries(asyncns) == 0);
        assert(asyncns_getnext(asyncns) == NULL);
        pollfd.fd = asyncns_fd(asyncns);
        assert(pollfd.fd > 2);
        query = asyncns_getaddrinfo(asyncns, "127.0.0.1", NULL, NULL);
        assert(query);
        assert(asyncns_getnqueries(asyncns) == 1);
        assert(asyncns_getnext(asyncns) == NULL);
        asyncns_cancel(asyncns, query);
        query = NULL;
        assert(asyncns_getnqueries(asyncns) == 0);
        assert(asyncns_getnext(asyncns) == NULL);
        query = asyncns_getaddrinfo(asyncns, "127.0.0.1", NULL, NULL);
        assert(query);
        assert(asyncns_getnqueries(asyncns) == 1);
        assert(asyncns_getnext(asyncns) == NULL);

        usleep(100000);
        status = poll(&pollfd, 1, 0);
        assert(status == 1);
        status = asyncns_wait(asyncns, 0);
        assert(status == 0);
        assert(asyncns_isdone(asyncns, query));
        assert(asyncns_getnqueries(asyncns) == 1);
        assert(asyncns_getnext(asyncns) == query);

        status = poll(&pollfd, 1, 100);
        assert(status == 0);

        status = asyncns_getaddrinfo_done(asyncns, query, &result);
        assert(asyncns_getnqueries(asyncns) == 0);

        /* Intuitively, this should not be needed but the docs state that
         * a call to `asyncns_wait()` is necessary so that `asyncns_getnext()`
         * provides meaningful results.
         */
        status = asyncns_wait(asyncns, 0);
        assert(status == 0);

        /* There were two queries issued, one of which has been cancelled
         * and the other has been freed afterwards. As none of them can be
         * returned, the only meaningful result of `asyncns_getnext()` is
         * NULL.
         */
        assert(asyncns_getnext(asyncns) == NULL);

        asyncns_free(asyncns);
        asyncns_freeaddrinfo(result);

        return EXIT_SUCCESS;
}
Výsledek je ten, že test náhodně padá na druhém nebo třetím testu výsledku asyncns_getnext() nebo projde, vyzkoušet můžete sami. Prvně tedy asyncns_getnext() správně vrací jeden nebo druhý dotaz, další volání někdy fungují a někdy ne. Opakovaná volání asyncns_wait() v testu původně nebyla, ale na základě nejednoznačné dokumentace v hlavičkovém souboru jsem je pro jistotu přidal. Můžete si všimnout možnosti předat na příkazové řádce volbu --skip-cancel, která způsobí vynechání testu vytvoření a zrušení dotazu. Zajímavé je, že s touto volbou test prochází i při mnohočetném opakování. Asi není náhodou, že se volání asyncns_cancel() v upstreamovém testu vůbec nevyskytuje.

Abych autorovi nekřivdil, dřívější API getaddrinfo_a od Ulricha Dreppera zahrnuté do glibc pro jistotu u gai_cancel() v dokumentaci vtipně uvádí, že dotaz nelze zrušit, pokud je zpracováván, což značně kazí iluzi možnosti dotaz kdykoli ukončit. Na druhou stranu libasyncns nedokumentuje, co se stane s již běžícím obslužným vláknem, takže těžko říct, co je horší. V netresolve se tomu vyhýbám tím, že vlákna vůbec nepoužívám a toto privilegium volitelně přenechávám aplikaci a backendům (žádný z mých backendů toho v tuto chvíli naštěstí nevyužívá).

Pořád si říkám, jestli jsem něco nepřehlédl. Navíc ani nevím, jestli a kam má smysl hlásit chybu, vzhledem k tomu, že libasyncns je mrtvý projekt. Nejspíš budu muset reimplementovat to samé pro jeho současnou alternativu v rámci systemd stromu.

UPDATE 2014-11-05: Na základě feedbacku od Hans1024 zápisek nyní obsahuje test, který lépe vystihuje problém s asyncns_cancel() a odkaz na odpovídající soubor v gitu.        

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Vložit další komentář

Hans1024 avatar 4.11.2014 23:17 Hans1024 | skóre: 5 | blog: hansovo
Rozbalit Rozbalit vše Re: libasyncns a testování
Tak jsem se na to podival a failovalo mi to trochu jinak :-D

Failoval mi asyncns_isdone(asyncns, q0), protoze pred nim se vola asyncns_cancel(asyncns, q0), ktera na q0 zavola free. Je to napsane i v tom headeru.

Pak pri asyncns_waitu failne !q->done v complete_query. Teprve po odstraneni toho assertu to failuje jak je popsano ve clanku.

Vypada to ze pri pouziti asyncns_cancel prijde nejaka odpoved (q1 nebo q2) dvakrat a proto failne ten assert !q->done. Mozna mam tuseni cim to je. asyncns_cancel asi zadnym zpusobem nerekne tomu threadu ktere vyrizuje q0, ze se na ten pozadavek ma vykaslat, akorat smaze veskere zaznamy o q0, takze ten thread pak posle odpoved na q0, asyncns_wait se ji snazi zpracovat a chybne urci, ze se jedna o odpoved na q1 nebo q2. Kdyz dam asyncns_wait(asyncns, 1); pred ten cancel, test funguje.
Veni, vidi, copi
pavlix avatar 5.11.2014 11:44 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: libasyncns a testování
Failoval mi asyncns_isdone(asyncns, q0), protoze pred nim se vola asyncns_cancel(asyncns, q0), ktera na q0 zavola free.
Tak na ten jsem se zatím nikdy nechytil, ale good catch, tahle kontrola tam nepatří.
Teprve po odstraneni toho assertu to failuje jak je popsano ve clanku.
Takže teď jsme na stejné situaci.
Vypada to ze pri pouziti asyncns_cancel prijde nejaka odpoved (q1 nebo q2) dvakrat a proto failne ten assert !q->done.
Ale mně failují až ty getnext, ne done, a dokonce jako první odpověď vždy dostanu q1 nebo q2, až potom i to failuje. Trochu jsem to vylepšil.
diff --git a/tests/test-asyncns.c b/tests/test-asyncns.c
index 80ed7b8..5194682 100644
--- a/tests/test-asyncns.c
+++ b/tests/test-asyncns.c
@@ -102,7 +102,6 @@ main(int argc, char **argv)
 		asyncns_cancel(asyncns, q0);
 		assert(asyncns_getnqueries(asyncns) == 0);
 		assert(asyncns_getnext(asyncns) == NULL);
-		assert(!asyncns_isdone(asyncns, q0));
 	}
 
 	/* Start first real query */
@@ -144,6 +143,9 @@ main(int argc, char **argv)
 	status = asyncns_wait(asyncns, 0);
 	assert(status == 0);
 
+	/* Check that the first query is no longer there */
+	assert(asyncns_getnext(asyncns) != q1);
+
 	/* Now second query should be available via `asycns_getnext()` */
 	assert(asyncns_getnext(asyncns) == q2);
 
@@ -157,6 +159,10 @@ main(int argc, char **argv)
 	status = asyncns_wait(asyncns, 0);
 	assert(status == 0);
 
+	/* Check that the old queries are no longer there */
+	assert(asyncns_getnext(asyncns) != q1);
+	assert(asyncns_getnext(asyncns) != q2);
+
 	/* Now no more queries should be available via `asycns_getnext()` */
 	assert(asyncns_getnext(asyncns) == NULL);
 
Zjistil jsem, že když to pustím v cyklu, tak se mi to náhodně zastaví na jedné z těch podmínek, kde to kontroluje, zda next není q1, což mi přijde dost divoké, zvlášť když je libasyncns schopná vrátit q1, po jeho zrušení q2 a po jeho zrušení zrušený q1.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
pavlix avatar 5.11.2014 11:48 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: libasyncns a testování
Aha, blbost, q0 a q1 se nejspíš alokují na stejné adrese, takže jsou nerozlišitelné.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
pavlix avatar 5.11.2014 11:59 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: libasyncns a testování
Udělal jsem ještě jednu úpravu, která zviditelní, že se opravdu jedná o q0 (v gitu), ale asi budu test ještě upravovat, abych ten problém chytil už v zárodku.
diff --git a/tests/test-asyncns.c b/tests/test-asyncns.c
index 5194682..099d78f 100644
--- a/tests/test-asyncns.c
+++ b/tests/test-asyncns.c
@@ -143,7 +143,8 @@ main(int argc, char **argv)
 	status = asyncns_wait(asyncns, 0);
 	assert(status == 0);
 
-	/* Check that the first query is no longer there */
+	/* Check that the old queries are no longer there */
+	assert(asyncns_getnext(asyncns) != q0);
 	assert(asyncns_getnext(asyncns) != q1);
 
 	/* Now second query should be available via `asycns_getnext()` */
@@ -160,6 +161,7 @@ main(int argc, char **argv)
 	assert(status == 0);
 
 	/* Check that the old queries are no longer there */
+	assert(asyncns_getnext(asyncns) != q0);
 	assert(asyncns_getnext(asyncns) != q1);
 	assert(asyncns_getnext(asyncns) != q2);
 
To je ale docela problém, protože libasyncns tak drží referenci na zrušená data, jestli to správně chápu, tu referenci dále používá a ještě navíc ji předává volajícímu. Ta funkce asyncns_cancel() je tím pádem v podstatě nevolatelná, pokud si člověk nechce rozsypat stav knihovny a aplikace.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
Hans1024 avatar 5.11.2014 12:19 Hans1024 | skóre: 5 | blog: hansovo
Rozbalit Rozbalit vše Re: libasyncns a testování
Vypada to, ze ten cacel se ve zdrojaku pouziva jen na uvolneni prostredku pokud neco failne pred odeslanim pozadavku, nebo az po obslouzeni pozadavku pri volani ruznych _done funkci. Nevidim zadny mechanismus, ktery by mohl zabranit probihajicimu threadu poslat odpoved, takze to k tomu asi neni vubec urcene. Ja bych to pojmenoval treba _free nebo _delete, _cancel je zjevne zbytecne matouci.
Veni, vidi, copi
pavlix avatar 5.11.2014 12:47 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: libasyncns a testování
Nevidim zadny mechanismus, ktery by mohl zabranit probihajicimu threadu poslat odpoved
To zní jako bug.
takze to k tomu asi neni vubec urcene.
Erm...
/** Cancel a currently running query. q is is destroyed by this call
 * and may not be used any futher. */
void asyncns_cancel(asyncns_t *asyncns, asyncns_query_t* q);
Dle dokumentace je to k tomu jednoznačně určené, jen to není naimplementované. Ovšem nemůžu přijít na minimální test, protože pokud vyzvednu zavolám poll(timeout=100) a asyncns_wait(block=1), tak asyncns_getnext() správně vrátí NULL a zdá se, že se to rozsype až s dalším dotazem a to ještě podle všeho nedeterministicky.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
pavlix avatar 5.11.2014 12:52 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: libasyncns a testování
Skoro to vypadá jako bych ty data od vlákna musel přečíst v době, kdy je zrušený dotaz nahrazený novým dotazem, a to jsem se ještě nehrabal v kódu toho asyncns.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
pavlix avatar 5.11.2014 12:54 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: libasyncns a testování
Jinak řečeno, ty nemůžeš zastavit vlákno s dotazem, ale musíš interně podržet objekt dotazu tak dlouho, dokud to vlákno nedoběhne, a pak teprve ho zrušit.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
pavlix avatar 5.11.2014 13:50 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: libasyncns a testování
Upravil jsem zápisek, aby obsahoval nový minimalistický test.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
Hans1024 avatar 5.11.2014 15:23 Hans1024 | skóre: 5 | blog: hansovo
Rozbalit Rozbalit vše Re: libasyncns a testování
zavolám poll(timeout=100) a asyncns_wait(block=1), tak asyncns_getnext() správně vrátí NULL a zdá se, že se to rozsype až s dalším dotazem
Ve funkci handle_response (kterou vola wait na vsechny odpovedi) je:
    if (!(q = lookup_query(asyncns, resp->id)))
        return 0;
Pokud je jedinny query ten smazany, pak lookup_query nenajde zadny query odpovidajici id odpovedi a getnext vraci NULL. Pri vytvoreni noveho query se muze stat, ze se prideli stejne id jako q0. Nedeterministicke je to mozna proto, ze prideleni toho id je ovlivnene tim, jestli thread pro q0 uz skoncil.
Veni, vidi, copi
pavlix avatar 5.11.2014 17:38 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: libasyncns a testování
Nový test podle všeho nedeterminismus odstraňuje. Koukám už do toho kódu libasyncns, tam se skutečně jen kopíruje id z toho query a pak se matchuje, problém je tedy v tom, že v případě, že current_id a current_index ukazuje an aktuální pozici a aktuální pozice se vymaže, při nové alokaci zůstává bohužel volné to nezvýšené id. Možná by stačilo jen to current_id a current_index společně posunout. Stejně mi přijde divné udržovat si current_index když je to jen current_id modulo MAX_QUERIES.
diff --git a/libasyncns/asyncns.c b/libasyncns/asyncns.c
index bc0b708..ada1d55 100644
--- a/libasyncns/asyncns.c
+++ b/libasyncns/asyncns.c
@@ -1474,6 +1474,10 @@ void asyncns_cancel(asyncns_t *asyncns, asyncns_query_t* q) {
     asyncns->n_queries--;
     free(q);
 
+    /* This is needed to avoid allocating the same id for the next query. */
+    asyncns->current_index++;
+    asyncns->current_id++;
+
     errno = saved_errno;
 }

S tímhle patchem mi test probíhá bez problémů.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
Hans1024 avatar 6.11.2014 10:19 Hans1024 | skóre: 5 | blog: hansovo
Rozbalit Rozbalit vše Re: libasyncns a testování
Jo, s timhle to funguje. Akorat me jeste napada mezni pripad - current_id muze pretect a v pripade, ze mezitim wait neprecetl starou odpoved, muze zase dojit ke kolizi id u odpovedi.
Veni, vidi, copi
pavlix avatar 6.11.2014 10:27 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: libasyncns a testování
Pokud to správně chápu, tak ten ḱód považuje current_id za dostatečně velké, aby se jednalo o unikátní identifikátor. A když to tak promýšlím, tak i při dlouhodobě běžícím procesu by přetečení neměl být problém, protože než se budou alokovat znovu malá id, tak bude ten zrušený dotaz zpracován.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
Hans1024 avatar 6.11.2014 11:03 Hans1024 | skóre: 5 | blog: hansovo
Rozbalit Rozbalit vše Re: libasyncns a testování
Nemusi byt zpracovan, current_id ted jde zvysovat jen vytvarenim a cencelovanim dotazu. Nebo nekteremu threadu bude odpoved trvat zatracene dlouho a mezitim to pretece. Asi je to nepravdepodobne, ale netusim jak to kdo bude zatezovat :-D
Veni, vidi, copi
pavlix avatar 5.11.2014 14:36 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: libasyncns a testování
A už zas nemám u ničeho tučňáky ;).
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
6.11.2014 19:48 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: libasyncns a testování
Kde je tučňák?
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
Bedňa avatar 7.11.2014 09:05 Bedňa | skóre: 34 | blog: Žumpa | Horňany
Rozbalit Rozbalit vše Re: libasyncns a testování
Aspoň je vidieť, že možnosť kliknúť len na linuxové blogy nemá zmysel.
KERNEL ULTRAS video channel >>>
pavlix avatar 7.11.2014 14:53 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: libasyncns a testování
A to už mám právo tučňáky rozdávat a občas kouknu, jestli bych ho neměl na něčí blog využít.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
7.11.2014 20:33 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: libasyncns a testování
Předpokládám, že můžeš i sám sobě, tak si ho dej.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
pavlix avatar 7.11.2014 21:01 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: libasyncns a testování
Technicky asi ano, ale kritérium je pokud vím zajímavý zápisek o linuxu nebo příbuzném tématu. A to bych pak označoval každý svůj zápisek k tématu, protože pokud by mi nepřipadal zajímavý, tak bych ho nepsal ;). K tomu by to chtělo nadhled někoho druhého.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
7.11.2014 22:54 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: libasyncns a testování
Já ti ho schvaluju a Bedňa bych řekl, že taky - co chceš víc(?)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
pavlix avatar 7.11.2014 22:59 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: libasyncns a testování
Aby někdo z vás taky dostal právo rozdávat tučňáky ;).
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
pavlix avatar 7.11.2014 23:00 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: libasyncns a testování
Tak výjimečně, ale doufám, že do budoucna ty práva ještě někdo aktivní dostane.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
Bedňa avatar 8.11.2014 01:33 Bedňa | skóre: 34 | blog: Žumpa | Horňany
Rozbalit Rozbalit vše Re: libasyncns a testování
:) Spýtaj sa Davkola asi keď máš práva tak ti ho už nikdy nikdo nedá, musíš si ho dať sám :D
KERNEL ULTRAS video channel >>>
pavlix avatar 7.11.2014 23:05 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: libasyncns a testování
Vidím, že se mi zmršila úprava, to je kombinací tří věcí:

1) Schopnost redakčního systému kurvit blogy po každém uložení tím, že vyrábí falešné prázdné odstavce mezi kusy textu, které mají být skutečnými odstavci.

2) Neumožňuje upload ze souboru při úpravě. Vzhledem k #1 dělám úpravy radši v texťáku a následně bych rád uploadoval výsledek a tím nahradil předchozí verzi.

3) Emulátor terminálu Terminology zdá se občas vynechá prázdnou řádku a občas ne, netuším proč.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
mirec avatar 14.11.2014 12:48 mirec | skóre: 31 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: libasyncns a testování
1) Schopnost redakčního systému kurvit blogy po každém uložení tím, že vyrábí falešné prázdné odstavce mezi kusy textu, které mají být skutečnými odstavci.

To robí wysiwyg. Vypnúť a pôjde to (teda aspoň mne to ide)

3) Emulátor terminálu Terminology zdá se občas vynechá prázdnou řádku a občas ne, netuším proč.

Nie sú tie riadky vypísané nejakým exotickejším spôsobom než \n? Ak sú vypísané pomocou riadiacich sekvencií mohlo by to znamenať, že terminology kopíruje relatívne surové dáta z terminálu. Možno sa mýlim, neskúšal som.

LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
pavlix avatar 15.11.2014 19:30 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: libasyncns a testování
To robí wysiwyg.
Nikoliv, ten nepoužívám.
Nie sú tie riadky vypísané nejakým exotickejším spôsobom než \n?
Jsou to úplně stejné nové řádky jako ty, které to vezme. Ale není se čemu divit, celý Enlightenment 0.19 je tak nějak po různu pojebaný, chtělo by to ještě trochu péče.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
15.11.2014 15:56 alexfa | skóre: 7
Rozbalit Rozbalit vše Re: libasyncns a testování
Pro jeden ze svych projektu hledam (spise ze zajimavosti a technickeho perfekcionalismu nez z objektivni nutnosti) asynchroniho DNS klienta. Jedna se o implementaci v C / POSIXu.

Nehledam reseni, ktere otevre threadu, ve ktere provede synchronni dotazy - tak to nakonec mam resene ted. To, co hledam, je reseni, ktere pracuje nad socket-based event loop (napr. libev), ktera je sdilena se 'zbytkem projektu'.

Moje kriteria jsou nasledujici:
  • prijatelna velikost zdrojoveho kodu (na netu najdete knihovny, ktere jsou jednoduse receno obrovske)
  • licence, ktera umoznuje pouziti v komercnim sektoru
  • podpora SVR, A a AAAA DSN query vcetne odolnosti proti typickym DNS utokum
Nasel jsem par projektu, ktere splnuji dve ze tri bodu - ale nehledal jsem nijak dusledne. Pokud mate nejaky tip, budu rad, me navedete. Pripadne, pokud ma nekdo zajem a expertizu, rad nejakym zpusobem podporim vznik/adaptaci open-source implementace, ktera ma zminene vlastnosti.
Ales Teska | Twitter: @alesteska | TeskaLabs | GitHub
pavlix avatar 15.11.2014 19:53 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: libasyncns a testování
Osobně implementuju obecný resolver, který právě funguje na principu neblokujícího vstupu a výstupu, tedy bez vláken, s volnou licencí (jednoduchá varianta BSD). Nicméně cílem projektu není implementovat DNS, to je řešeno backendy. Momentálně jsou k dispozici backendy pro libunbound a c-ares, obojí rovněž pod volnou licencí, c-ares bude předpokládám podstatně lehčí vzhledem k funkcionalitě. Velikostí zdrojových kódů se příliš nezabývám, repozitáře obsahují různé věci, zajímá mě, jaké zdrojáky se skutečně použijí a co z toho vypadne jako výsledek.

Pokud jde o DNS jako takové, osobně se teď zabývám právě těmito dvěma knihovnami, každá má své výhody i nevýhody. Mám v zásobě nějaké změny pro každou z nich a budu se tím dále zabývat. Nemám nic proti sdílení zkušeností, případně bych i rozšířil netresolve o další DNS backend, pokud by to dávalo smysl. Na práci s DNS daty používám knihovnu ldns a ty klientské knihovny se snažím pokud možno používat jen pro dotazování, případně pro validaci pomocí DNSSEC (v případě libunbound). Minimalizuju tím množství kódu, který je potřeba udržovat.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.

Založit nové vláknoNahoru

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.