środa, października 10, 2018

Keycloak i Spring Boot






piątek, października 05, 2018

CentOS 7.5 i OpenShift

[root@vger ~]# cat /etc/hosts | grep -v vger
[root@vger ~]# nslookup vger
Server:  10.0.100.11
Address: 10.0.100.11#53

Name: vger.dc1
Address: 10.0.100.9

[root@vger ~]# hostname
vger.dc1
[root@vger ~]# cat /etc/docker/daemon.json 
{
  "insecure-registries" : ["172.30.0.0/16"]
}
[root@vger ~]# cat /etc/sysconfig/docker-storage
DOCKER_STORAGE_OPTIONS="--storage-driver devicemapper "

[root@vger ~]# oc cluster up --public-hostname=vger.dc1 --routing-suffix=vger.dc1
Getting a Docker client ...
Checking if image openshift/origin-control-plane:v3.10 is available ...
Checking type of volume mount ...
Determining server IP ...
Checking if OpenShift is already running ...
Checking for supported Docker version (=>1.22) ...
Checking if insecured registry is configured properly in Docker ...
Checking if required ports are available ...
Checking if OpenShift client is configured properly ...
Checking if image openshift/origin-control-plane:v3.10 is available ...
Starting OpenShift using openshift/origin-control-plane:v3.10 ...
I1005 21:51:11.942799    5710 flags.go:30] Running "create-kubelet-flags"
I1005 21:51:22.454887    5710 run_kubelet.go:48] Running "start-kubelet"
I1005 21:51:27.032852    5710 run_self_hosted.go:172] Waiting for the kube-apiserver to be ready ...
I1005 21:52:22.045049    5710 interface.go:26] Installing "kube-proxy" ...
I1005 21:52:22.045121    5710 interface.go:26] Installing "kube-dns" ...
I1005 21:52:22.045154    5710 interface.go:26] Installing "openshift-apiserver" ...
I1005 21:52:22.045285    5710 apply_template.go:83] Installing "openshift-apiserver"
I1005 21:52:22.045307    5710 apply_template.go:83] Installing "kube-proxy"
I1005 21:52:22.045311    5710 apply_template.go:83] Installing "kube-dns"
I1005 21:54:12.417444    5710 interface.go:41] Finished installing "kube-proxy" "kube-dns" "openshift-apiserver"
I1005 21:54:54.701497    5710 run_self_hosted.go:224] openshift-apiserver available
I1005 21:54:54.701602    5710 interface.go:26] Installing "openshift-controller-manager" ...
I1005 21:54:54.701675    5710 apply_template.go:83] Installing "openshift-controller-manager"
I1005 21:55:10.621027    5710 interface.go:41] Finished installing "openshift-controller-manager"
Adding default OAuthClient redirect URIs ...
Adding sample-templates ...
Adding persistent-volumes ...
Adding web-console ...
Adding registry ...
Adding centos-imagestreams ...
Adding router ...
I1005 21:55:10.661454    5710 interface.go:26] Installing "sample-templates" ...
I1005 21:55:10.661498    5710 interface.go:26] Installing "persistent-volumes" ...
I1005 21:55:10.661516    5710 interface.go:26] Installing "openshift-web-console-operator" ...
I1005 21:55:10.661538    5710 interface.go:26] Installing "openshift-image-registry" ...
I1005 21:55:10.661554    5710 interface.go:26] Installing "centos-imagestreams" ...
I1005 21:55:10.661570    5710 interface.go:26] Installing "openshift-router" ...
I1005 21:55:10.662026    5710 apply_list.go:68] Installing "centos-imagestreams"
I1005 21:55:10.662337    5710 interface.go:26] Installing "sample-templates/postgresql" ...
I1005 21:55:10.662360    5710 interface.go:26] Installing "sample-templates/dancer quickstart" ...
I1005 21:55:10.662378    5710 interface.go:26] Installing "sample-templates/django quickstart" ...
I1005 21:55:10.662395    5710 interface.go:26] Installing "sample-templates/nodejs quickstart" ...
I1005 21:55:10.662412    5710 interface.go:26] Installing "sample-templates/rails quickstart" ...
I1005 21:55:10.662430    5710 interface.go:26] Installing "sample-templates/jenkins pipeline ephemeral" ...
I1005 21:55:10.662448    5710 interface.go:26] Installing "sample-templates/sample pipeline" ...
I1005 21:55:10.662463    5710 interface.go:26] Installing "sample-templates/mongodb" ...
I1005 21:55:10.662480    5710 interface.go:26] Installing "sample-templates/mariadb" ...
I1005 21:55:10.662495    5710 interface.go:26] Installing "sample-templates/mysql" ...
I1005 21:55:10.662510    5710 interface.go:26] Installing "sample-templates/cakephp quickstart" ...
I1005 21:55:10.662589    5710 apply_list.go:68] Installing "sample-templates/cakephp quickstart"
I1005 21:55:10.663004    5710 apply_list.go:68] Installing "sample-templates/postgresql"
I1005 21:55:10.663305    5710 apply_list.go:68] Installing "sample-templates/dancer quickstart"
I1005 21:55:10.663425    5710 apply_template.go:83] Installing "openshift-web-console-operator"
I1005 21:55:10.663593    5710 apply_list.go:68] Installing "sample-templates/django quickstart"
I1005 21:55:10.664252    5710 apply_list.go:68] Installing "sample-templates/nodejs quickstart"
I1005 21:55:10.664465    5710 apply_list.go:68] Installing "sample-templates/rails quickstart"
I1005 21:55:10.665384    5710 apply_list.go:68] Installing "sample-templates/mongodb"
I1005 21:55:10.666120    5710 apply_list.go:68] Installing "sample-templates/jenkins pipeline ephemeral"
I1005 21:55:10.666799    5710 apply_list.go:68] Installing "sample-templates/sample pipeline"
I1005 21:55:10.667865    5710 apply_list.go:68] Installing "sample-templates/mariadb"
I1005 21:55:10.668691    5710 apply_list.go:68] Installing "sample-templates/mysql"
I1005 21:57:27.162468    5710 interface.go:41] Finished installing "sample-templates/postgresql" "sample-templates/dancer quickstart" "sample-templates/django quickstart" "sample-templates/nodejs quickstart" "sample-templates/rails quickstart" "sample-templates/jenkins pipeline ephemeral" "sample-templates/sample pipeline" "sample-templates/mongodb" "sample-templates/mariadb" "sample-templates/mysql" "sample-templates/cakephp quickstart"
I1005 21:57:27.162561    5710 interface.go:41] Finished installing "sample-templates" "persistent-volumes" "openshift-web-console-operator" "openshift-image-registry" "centos-imagestreams" "openshift-router"
Server Information ...
OpenShift server started.

The server is accessible via web console at:
    https://vger.dc1:8443

[root@vger ~]# firewall-cmd --zone=public --permanent --add-port=8443/tcp

Trzeba mieć poprawnie skonfigurowane DNSy!

piątek, września 21, 2018

How Alibaba analyzes production problems

https://github.com/alibaba/arthas



piątek, września 07, 2018

Business Continuity Management & Disaster Recovery (O rekomendacji M 11 KNF)

Nieprawidłowe działanie sprzętu, oprogramowania, sieci telekomunikacyjnych i komputerowych, urządzeń podtrzymujących zasilanie oraz przerwy w dopływie energii elektrycznej to tylko podstawowe problemy, które (cytując dokument KNF) mogą mieć miejsce szczególnie w sytuacji awarii lub zniszczenia infrastruktury informatycznej, telekomunikacyjnej lub fizycznej i mogą być przyczyną znaczących strat finansowych dla
banku oraz problemów dla całego systemu finansowego. Do awarii w IT/NT powinien być przygotowany każdy biznes, więc rekomendacje KNF można uznać za generyczne i uniwersalne dla każdej branży.
Firma powinna posiadać plan utrzymania ciągłości działania zapewniający poziom usług dla klientów na akceptowanym poziomie oraz plany awaryjne służące zapewnieniu możliwości odtworzenia działalności i ograniczeniu strat:
- procesy krytyczne powinny mieć określone alternatywne mechanizmy sprawnego funkcjonowania lub wznowienia działania w przypadku awarii;
- kolokacja i backup powinny mitygować ryzyko utraty nie tylko danych głównych, ale także ich kopii;
- należy przewidzieć działanie IT/NT przy ograniczonych zasobach i określić maksymalny czas działania rozwiązań zapasowych;
- należy zadbać o jakość danych (spójność, kompletność, aktualność);
- przy awariach należy zapewnić sobie alternatywne źródło usług oraz zasoby niezbędne do zmiany dostawcy usług w niezbędnym czasie, także zapisami w umowach z odpowiednimi podmiotami.

środa, września 05, 2018

OpenID Connect

http://openid.net/connect/faq/
https://connect2id.com/learn/openid-connect
https://developers.google.com/identity/protocols/OpenIDConnect
https://accounts.google.com/.well-known/openid-configuration
https://istio.io/docs/reference/config/istio.authentication.v1alpha1/
https://www.keycloak.org/docs/3.0/server_admin/topics/threat/compromised-tokens.html
https://www.ibm.com/support/knowledgecenter/SSFS6T/com.ibm.apic.toolkit.doc/tutorial_apionprem_security_OAuth.html

wtorek, sierpnia 14, 2018

Changelog for Java Cryptography

https://www.java.com/en/jre-jdk-cryptoroadmap.html

poniedziałek, sierpnia 13, 2018

Spiskowa teoria o sprzęcie x86

Fakt numer 1: Intel o słynnych dziurach bezpieczeństwa w swoich procesorach najpierw poinformował Chiny, dopiero później w ramach Google Project Zero została poinformowana reszta świata, włączając Stany Zjednoczone. Może trzyliterowe organizacje z USA najbardziej zainteresowane tematem wcale nie musiały być informowane (Dzisiejszy odcinek Ulicy Sezamkowej sponsorują literki N oraz C), bo były zaangażowane w powstanie dziur? Pomyślmy logicznie, czy sam wyścig wydajności pomiędzy Intelem a AMD, uzasadniałby totalne pomijanie kwestii bezpieczeństwa? Przecież procesorów Intela używają banki, elektrownie, medycyna. Przecież przy projektowaniu muszą być wykorzystywani specjaliści od bezpieczeństwa a przy testowaniu procesora używa się technik rozmycia kodu do automatycznego znajdowaniu dziur. Kto jak nie Intel powinien mieć do tego rozbudowaną infrastrukturę. Jak się poczyta wywody Snowdena, to dziury w Intelach są bardzo w stylu NSA.
Fakt numer 2: AMD jako posiadacz licencji na x86 zakłada spółkę joint venture na wytwarzanie procesorów w Chinach. Na kombinowanie z licencją x86 musi być zgoda Intela, nie ma innej opcji. Zwłaszcza na tak dużą skalę dla kontynentalnych Chin zasilających w elektronikę cały świat. Intel, który poinformował Chiny jako pierwsze o dziurach w sprzęcie, zgodził się, żeby Chiny samodzielnie wytwarzały procesory w jego architekturze. Czy aby przypadkiem nie miał trudnych rozmów z Chinami na temat tego, co w krzemie siedzi? Może dostał ultimatum - chcemy wiedzieć, czego używany, sami produkować procesory. Jeśli nie x86 to ARM, ale wtedy na x86 wprowadzimy embargo.
Chiny dostały do to chciały - dla celów rządowych mogą używać własnych bezpiecznych CPU. Intel może sprzedawać procesory do Chin.

wtorek, czerwca 12, 2018

Why GMail with Google Sans is ugly on non HDPI screens

Please notice how 'z' is drawn - top edge is doubled comparing to Arial's 'z'. Also strike in Google's 't' is affected by the same unpleasant readability problem. Google Sans looks dirty while Arial is clear. Let's open Google Sans is TTFEdit from Source Forge. Written by me about 12 years ago in Java 5. Height of 'z' from Google is 500 units, while 'z' from Arial is designed on area with height 1024. Font renderer is optimized for fonts which created Internet and they for base use 1024. As a result modern 'z' is scaled strange way and looks ugly.







czwartek, maja 31, 2018

Boże Ciało na Gocławiu







czwartek, maja 17, 2018

In case EMS server is overloaded on DEV

tibemsd.conf:
flow_control=enabled

per queue:
expiration=180min
flowControl=100MB
maxbytes=300MB
maxmsgs=100000
overflowPolicy=discardOld

środa, maja 16, 2018

The first Docker ready JDK

Get it from https://hub.docker.com/r/kubaseai/openj9ce






sobota, maja 12, 2018

Co Architekt IT powinien wiedzieć o RODO

Unia Europejska jest w końcu na bieżąco z rzeczywistością internetową, co podkreśla motyw 6. Nowe prawo ma świadomość istnienia podmiotów krajowych oraz międzynarodowych/globalnych. Dla tych ostatnich nie ma już szarych obszarów, są jasne regulacje, na co zwracają uwagę np. urzędnicy Ministerstwa Cyfryzacji. Gdyby było RODO prawdopodobnie nie byłoby afery z Cambridge Analytica. Motyw 22: "Przetwarzanie danych osobowych w kontekście działalności prowadzonej przez jednostkę organizacyjną administratora lub podmiotu przetwarzającego w Unii powinno odbywać się zgodnie z niniejszym rozporządzeniem, niezależnie od tego, czy samo przetwarzanie ma miejsce w Unii." Motyw 10: "Należy zapewnić spójne i jednolite w całej Unii stosowanie przepisów o ochronie podstawowych praw i wolności osób fizycznych w związku z przetwarzaniem danych osobowych." Takie same przepisy w każdym kraju uniemożliwią globalnym graczom zakładanie spółki w wybranym państwie, gdzie przepisy najmniej chronią obywateli. Decyzje o przetwarzaniu danych zapadają w centrali (vide motyw 36).

Czy mała firma powinna bać się RODO? Nie. Motyw 4: "Prawo do ochrony danych osobowych nie jest prawem bezwzględnym; należy je postrzegać w kontekście jego funkcji społecznej i wyważyć względem innych praw podstawowych w myśl zasady proporcjonalności.". Nie można wymagać pełnego rozmachu zabezpieczeń IT charakterystycznego dla globalnej firmy wobec małego podmiotu. Motyw 13 mówi: "Z uwagi na szczególną sytuację mikroprzedsiębiorstw oraz małych i średnich przedsiębiorstw niniejsze rozporządzenie przewiduje wyjątek dotyczący rejestrowania czynności przetwarzania dla podmiotów zatrudniających mniej niż 250 pracowników. Ponadto zachęca się instytucje i organy Unii, państwa członkowskie i ich organy nadzorcze, by stosując niniejsze rozporządzenie, uwzględniały szczególne potrzeby mikroprzedsiębiorstw oraz małych i średnich przedsiębiorstw.". Motyw 15: "Ochrona osób fizycznych powinna mieć zastosowanie do zautomatyzowanego przetwarzania danych osobowych oraz do przetwarzania ręcznego, jeżeli dane osobowe znajdują się lub mają się znaleźć w zbiorze danych. Zbiory lub zestawy zbiorów oraz ich strony tytułowe, które nie są uporządkowane według określonych kryteriów nie powinny być objęte zakresem niniejszego rozporządzenia.".

Ochrona w kontekście firm globalnych jest dobrze określona, vide motyw 23: "Aby osoby fizyczne nie zostały pozbawione ochrony przysługującej im na mocy niniejszego rozporządzenia, przetwarzanie danych osobowych osób, których dane dotyczą, znajdujących się w Unii, przez administratora lub podmiot przetwarzający, którzy nie posiadają jednostki organizacyjnej w Unii, powinno podlegać niniejszemu rozporządzeniu, jeżeli czynności przetwarzania wiążą się z oferowaniem takim osobom towarów lub usług, niezależnie od tego, czy pociąga to za sobą płatność. Aby stwierdzić, czy administrator lub podmiot przetwarzający oferują towary lub usługi znajdującym się w Unii osobom, których dane dotyczą, należy ustalić, czy jest oczywiste, że administrator lub podmiot przetwarzający planują oferować usługi osobom, których dane dotyczą, w co najmniej jednym państwie członkowskim Unii. O ile do ustalenia takiego zamiaru nie wystarczy sama dostępność w Unii strony internetowej administratora, podmiotu przetwarzającego, pośrednika, adresu poczty elektronicznej lub innych danych kontaktowych ani posługiwanie się językiem powszechnie stosowanym w państwie trzecim, w którym jednostkę organizacyjną ma administrator, o tyle potwierdzeniem oczywistości faktu, że administrator planuje oferować w Unii towary lub usługi osobom, których dane dotyczą, mogą być czynniki takie, jak posługiwanie się językiem lub walutą powszechnie stosowanymi w co najmniej jednym państwie członkowskim oraz możliwość zamówienia towarów i usług w tym języku lub wzmianka o klientach lub użytkownikach znajdujących się w Unii.". Jest strona WWW po angielsku - podlega pod RODO. Duża firma w celu ochrony danych osobowych powinna mieć fachowca od prawa i od IT (motyw 97).

W przeglądarce internetowej mamy Omnibox, który po stronie chmury po naszym adresie IP profiluje nasze zachowanie. Podlega to prawu RODO.
Motyw 24: "Przetwarzanie danych osobowych znajdujących się w Unii osób, których dane dotyczą, przez administratora lub podmiot przetwarzający, którzy nie mają jednostki organizacyjnej w Unii, powinno podlegać niniejszemu rozporządzeniu także w przypadkach, gdy wiąże się z monitorowaniem zachowania takich osób, których dane dotyczą, o ile zachowanie to ma miejsce w Unii. Aby stwierdzić, czy czynność przetwarzania można uznać za „monitorowanie zachowania” osób, których dane dotyczą, należy ustalić, czy osoby fizyczne są obserwowane w internecie, w tym także czy później potencjalnie stosowane są techniki przetwarzania danych polegające na profilowaniu osoby fizycznej, w szczególności w celu podjęcia decyzji jej dotyczącej lub przeanalizowania lub prognozowania jej osobistych preferencji, zachowań i postaw.".

RODO zawiera bardzo ważne definicje, mające wpływ na techniczne implementacje ochrony danych osobowych. Motyw 26: "Zasady ochrony danych powinny mieć zastosowanie do wszelkich informacji o zidentyfikowanych lub możliwych do zidentyfikowania osobach fizycznych. Spseudonimizowane dane osobowe, które przy użyciu dodatkowych informacji można przypisać osobie fizycznej, należy uznać za informacje o możliwej do zidentyfikowania osobie fizycznej. Aby stwierdzić, czy dana osoba fizyczna jest możliwa do zidentyfikowania, należy wziąć pod uwagę wszelkie rozsądnie prawdopodobne sposoby (w tym wyodrębnienie wpisów dotyczących tej samej osoby), w stosunku do których istnieje uzasadnione prawdopodobieństwo, iż zostaną wykorzystane przez administratora lub inną osobę w celu bezpośredniego lub pośredniego zidentyfikowania osoby fizycznej. Aby stwierdzić, czy dany sposób może być z uzasadnionym prawdopodobieństwem wykorzystany do zidentyfikowania danej osoby, należy wziąć pod uwagę wszelkie obiektywne czynniki, takie jak koszt i czas potrzebne do jej zidentyfikowania, oraz uwzględnić technologię dostępną w momencie przetwarzania danych, jak i postęp technologiczny. Zasady ochrony danych nie powinny więc mieć zastosowania do informacji anonimowych, czyli informacji, które nie wiążą się ze zidentyfikowaną lub możliwą do zidentyfikowania osobą fizyczną, ani do danych osobowych zanonimizowanych w taki sposób, że osób, których dane dotyczą, w ogóle nie można zidentyfikować lub już nie można zidentyfikować. Niniejsze rozporządzenie nie dotyczy więc przetwarzania takich anonimowych informacji, w tym przetwarzania do celów statystycznych lub naukowych.".
Jak można poprawnie spseudonimizować dane? W jednej tabeli w jednej bazie trzymać imię, nazwisko, email z generowanym kluczem, a w innej bazie trzymać profilowane dane z tym samym kluczem zewnętrznym. Jeśli jednak w tej drugiej bazie po agregacji danych da się z pewnym prawdopodobieństwem określić jakiej osoby mogą dotyczyć wpisy, to nie można zastosować takiego rozwiązania technicznego - klucz zewnętrzny nie może się powtarzać. Przykład: logi WWW, osoba korzysta z webmaila w domenie o jej nazwisku i przy pomocy powtarzającego się klucza zewnętrznego można prześledzić pełną historię online takiej osoby. Jest to obszar działania architekta IT i architekta danych.

Firmy, które dla potrzeb mailingu na stronie WWW miały domyślnie zaznaczone wszystkie checkboxy w formularzu zgód, muszą potwórzyć ich uzyskanie. Motyw 32: "Zgoda powinna być wyrażona w drodze jednoznacznej, potwierdzającej czynności, która wyraża odnoszące się do określonej sytuacji dobrowolne, świadome i jednoznaczne przyzwolenie osoby, których dane dotyczą, na przetwarzanie dotyczących jej danych osobowych i która ma na przykład formę pisemnego (w tym elektronicznego) lub ustnego oświadczenia. Może to polegać na zaznaczeniu okienka wyboru podczas przeglądania strony internetowej, na wyborze ustawień technicznych do korzystania z usług społeczeństwa informacyjnego lub też na innym oświadczeniu bądź zachowaniu, które w danym kontekście jasno wskazuje, że osoba, której dane dotyczą, zaakceptowała proponowane przetwarzanie jej danych osobowych. Milczenie, okienka domyślnie zaznaczone lub niepodjęcie działania nie powinny zatem oznaczać zgody. Zgoda powinna dotyczyć wszystkich czynności przetwarzania dokonywanych w tym samym celu lub w tych samych celach. Jeżeli przetwarzanie służy różnym celom, potrzebna jest zgoda na wszystkie te cele. Jeżeli osoba, której dane dotyczą, ma wyrazić zgodę w odpowiedzi na elektroniczne zapytanie, zapytanie takie musi być jasne, zwięzłe i nie zakłócać niepotrzebnie korzystania z usługi, której dotyczy.". Motyw 42: "Wyrażenia zgody nie należy uznawać za dobrowolne, jeżeli osoba, której dane dotyczą, nie ma rzeczywistego lub wolnego wyboru oraz nie może odmówić ani wycofać zgody bez niekorzystnych konsekwencji.".
Warunki przetwarzania powinny być zawsze łatwo dostępne na stronie WWW (motyw 39) i prosto sformułowane (motyw 58). Jeśli osoba jest profilowana musi o tym być poinformowana explicite (motyw 60). Musi istnieć sposób elektronicznego zgłaszania żądań i muszą być one rozpatrzone w ciągu miesiąca (motyw 59). Każdy ma prawo do skasowania danych o nim (w szczególności w marketingu bezpośrednim - motyw 70) lub ich sprostowania (motyw 65).
Jeśli firma nie jest w stanie udokumentować wyrażenia zgody (bo np. na rekordzie osobowym jest tylko flaga o zgodzie) to musi ona uzyskać ją ponownie, patrz motyw 42: "administrator powinien być w stanie wykazać, że osoba, której dane dotyczą, wyraziła zgodę na operację przetwarzania.". W systemie IT powinna być przechowywana informacja zawierająca znacznik czasu, treść zgody, kanał komunikacyjny.
Zmuszanie klienta to wyrażenia zgód na pakiet celów jest niezgodne z prawem - motyw 43: "Zgody nie uważa się za dobrowolną, jeżeli nie można jej wyrazić z osobna na różne operacje przetwarzania danych osobowych, mimo że w danym przypadku byłoby to stosowne, lub jeżeli od zgody uzależnione jest wykonanie umowy – w tym świadczenie usługi – mimo że do jej wykonania zgoda nie jest niezbędna.".
Jeśli zgromadzone dane nie pozwalają na identyfikację osoby fizycznej administrator nie ma obowiązku ich uzupełnienia (motyw 57) np. poprzez mailing z taką prośbą.
Nie można przetwarzać danych osobowych dzieci poniżej 16 roku życia bez zgody ich rodziców (art. 8).
Komunikacja z osobą fizyczną w sprawie danych osobowych jest obowiązkiem administratora (art. 12).
W momencie wyrażania zgody osoba fizyczna musi znać tożsamość i dane kontaktowe administratora, inspektora ochrony danych; odbiorców danych; cel i okres przetwarzania; konieczności i prawa; fakt automatycznego przetwarzania i profilowania (art. 13).

Bardzo ważny jest cel przetwarzania (motyw 50). Nie można mieć podejścia, że jeśli mamy dane z jakiegokolwiek źródła to biznesowo i technicznie można z nimi zrobić wszystko. Nie można składować danych w jednym miejscy, jeśli zostały pozyskane z różnych źródeł ze zgodami na różne cele (chyba, że w ogólności są to te same cele tych samych podmiotów). Każdy cel definiuje też zbiór danych. Jeśli dana grupa kapitałowa ma wiele spółek, to nie mogą dowolnie wymieniać się danymi horyzontalnie, spójność i granice zbioru powinny być zachowane. Zgoda na przetwarzanie danych musi być wtedy udzielona grupie kapitałowej lub wszystkim współadministratorom (art. 26). Jeśli grupa kapitałowa wydziela jednostkę o oddzielnej osobowości prawnej do przetwarzania danych osobowych i zawiera z nią umowę o przetwarzaniu to nadal integralność zbiorów musi być zachowana. Zgoda osoby fizycznej jest udzielona ściśle określonemu podmiotowi. Jedyny wyjątek to cele administracyjne grupy kapitałowej (motyw 48: "Administratorzy, którzy są częścią grupy przedsiębiorstw lub instytucji powiązanych z podmiotem centralnym, mogą mieć prawnie uzasadniony interes w przesyłaniu danych osobowych w ramach grupy przedsiębiorstw do wewnętrznych celów administracyjnych, co dotyczy też przetwarzania danych osobowych klientów lub pracowników. Pozostaje to bez wpływu na ogólne zasady przekazywania danych osobowych w ramach grupy przedsiębiorstw przedsiębiorstwu mieszczącemu się w państwie trzecim."). Jeśli przetwarzanie powierza się innemu podmiotowi osoba fizyczna musi o tym wiedzieć (motyw 61). Szczegółowe zasady ousourcingu określa art. 28 i 29.
Nie można gromadzić więcej danych ("na zapas, na wszelki wypadek") ani przechowywać dłużej niż wynika to z celu (motyw 39).
"Dane osobowe powinny być przetwarzane w sposób zapewniający im odpowiednie bezpieczeństwo i odpowiednią poufność, w tym ochronę przed nieuprawnionym dostępem do nich i do sprzętu służącego ich przetwarzaniu oraz przed nieuprawnionym korzystaniem z tych danych i z tego sprzętu.". Dalej, "obowiązek wdrożenia odpowiednich i skutecznych środków oraz powinien być w stanie wykazać, że czynności przetwarzania są zgodne z niniejszym rozporządzeniem oraz, że są skuteczne. Środki te powinny uwzględniać charakter, zakres, kontekst i cele przetwarzania oraz ryzyko naruszenia praw i wolności osób fizycznych." (motyw 74). W praktyce oznacza to, że administrator powinien mieć dokumentację definicji zbioru danych (w tym celu), analizę zagrożeń (ryzyko zwykłe i wysokie) i wdrożonych mitygacji/środków ochronnych (polityki także "w formie zatwierdzonych kodeksów postępowania, zatwierdzonej certyfikacji, wytycznych Europejskiej Rady Ochrony Danych lub poprzez sugestie inspektora ochrony danych", [77]).
Jakie są zagrożenia? Według motywu 75: uszczerbek fizyczny lub szkody majątkowe lub niemajątkowe, w szczególności:
- "jeżeli przetwarzanie może poskutkować dyskryminacją, kradzieżą tożsamości lub oszustwem dotyczącym tożsamości, stratą finansową, naruszeniem dobrego imienia, naruszeniem poufności danych osobowych chronionych tajemnicą zawodową, nieuprawnionym odwróceniem pseudonimizacji lub wszelką inną znaczną szkodą gospodarczą lub społeczną"; 
- "jeżeli osoby, których dane dotyczą, mogą zostać pozbawione przysługujących im praw i wolności lub możliwości sprawowania kontroli nad swoimi danymi osobowymi";
- "jeżeli przetwarzane są dane osobowe ujawniające pochodzenie rasowe lub etniczne, poglądy polityczne, wyznanie lub przekonania światopoglądowe, lub przynależność do związków zawodowych oraz jeżeli przetwarzane są dane genetyczne, dane dotyczące zdrowia lub dane dotyczące seksualności lub wyroków skazujących i naruszeń prawa lub związanych z tym środków bezpieczeństwa";
- "jeżeli oceniane są czynniki osobowe, w szczególności analizowane lub prognozowane aspekty dotyczące efektów pracy, sytuacji ekonomicznej, zdrowia, osobistych preferencji lub zainteresowań, wiarygodności lub zachowania, lokalizacji lub przemieszczania się – w celu tworzenia lub wykorzystywania profili osobistych";
- "jeżeli przetwarzane są dane osobowe osób wymagających szczególnej opieki, w szczególności dzieci";
- "jeżeli przetwarzanie dotyczy dużej ilości danych osobowych i wpływa na dużą liczbę osób, których dane dotyczą".
Grupy przedsiębiorstw mogą tworzyć wspólne polityki ochrony danych (motyw 110).
Można przekazywać dane osobowe hackerów (motyw 49), których napotykamy chroniąc nasz zbiór.
Administrator ma 72 godziny na po stwierdzeniu naruszenia ochrony danych osobowych do notyfikacji organu nadzorczego ODO (motyw 85).
W przypadku poważnych skutków naruszenia osoba fizyczna, której dane dotyczą, powinna być poinformowana niezwłocznie [86].
"Za szkodę, którą dana osoba poniosła wskutek przetwarzania w sposób naruszający niniejsze rozporządzenie, powinno przysługiwać odszkodowanie od administratora lub podmiotu przetwarzającego. Administrator lub podmiot przetwarzający powinni jednak zostać zwolnieni z odpowiedzialności prawnej, jeżeli udowodnią, że szkoda w żadnym razie nie powstała z ich winy." "Jeżeli administratorzy lub podmioty przetwarzające uczestniczą w tym samym przetwarzaniu, każdy administrator lub podmiot przetwarzający powinien odpowiadać prawnie za całość szkody." (motyw 146).
"Aby egzekwowanie przepisów niniejszego rozporządzenia było skuteczniejsze, należy za jego naruszenie nakładać sankcje, w tym administracyjne kary pieniężne – oprócz lub zamiast odpowiednich środków nakładanych na mocy niniejszego rozporządzenia przez organ nadzorczy. Jeżeli naruszenie jest niewielkie lub jeżeli grożąca kara pieniężna stanowiłaby dla osoby fizycznej nieproporcjonalne obciążenie, można zamiast tego udzielić upomnienia. Powinno się jednak zwrócić należytą uwagę na charakter, wagę oraz czas trwania naruszenia, na to, czy naruszenie nie było umyślne, na działania podjęte dla zminimalizowania szkody, na stopień odpowiedzialności lub wszelkie mające znaczenie wcześniejsze naruszenia, na sposób, w jaki organ nadzorczy dowiedział się o naruszeniu, na przestrzeganie środków nałożonych na administratora lub podmiot przetwarzający, na stosowanie kodeksów postępowania oraz wszelkie inne czynniki obciążające lub łagodzące. Nakładanie sankcji, w tym administracyjnych kar pieniężnych, powinno podlegać odpowiednim zabezpieczeniom proceduralnym zgodnym z ogólnymi zasadami prawa Unii i z Kartą praw podstawowych, w tym skutecznej ochronie prawnej i prawu do rzetelnego procesu." [148].

Motyw 78 mówi o dwóch ważnych zasadach: uwzględniania ochrony danych w fazie projektowania oraz z domyślnej ochrony danych.
"Takie środki mogą polegać m.in. na minimalizacji przetwarzania danych osobowych, jak najszybszej pseudonimizacji danych osobowych, przejrzystości co do funkcji i przetwarzania danych osobowych, umożliwieniu osobie, której dane dotyczą, monitorowania przetwarzania danych, umożliwieniu administratorowi tworzenia i doskonalenia zabezpieczeń. Jeżeli opracowywane, projektowane, wybierane i użytkowane są aplikacje, usługi i produkty, które opierają się na przetwarzaniu danych osobowych albo przetwarzają dane osobowe w celu realizacji swojego zadania, należy zachęcać wytwórców tych produktów, usług i aplikacji, by podczas opracowywania i projektowania takich produktów, usług i aplikacji wzięli pod uwagę prawo do ochrony danych osobowych i z należytym uwzględnieniem stanu wiedzy technicznej zapewnili administratorom i podmiotom przetwarzającym możliwość wywiązania się ze spoczywających na nich obowiązków ochrony danych. Zasadę uwzględniania ochrony danych w fazie projektowania i zasadę domyślnej ochrony danych należy też brać pod uwagę w przetargach publicznych.".

Powierzając przetwarzanie danych osobowych innemu podmiotowi administrator powinien "korzystać z usług wyłącznie podmiotów przetwarzających, które zapewniają wystarczające gwarancje – w szczególności jeżeli chodzi o wiedzę fachową, wiarygodność i zasoby – wdrożenia środków technicznych i organizacyjnych odpowiadających wymogom niniejszego rozporządzenia, w tym wymogom bezpieczeństwa przetwarzania." (motyw 81) najlepiej na podstawie umowy określającej "przedmiot i czas trwania przetwarzania, charakter i cele przetwarzania, rodzaj danych osobowych i kategorie osób, których dane dotyczą", "konkretne zadania i obowiązki podmiotu przetwarzającego w kontekście planowanego przetwarzania oraz ryzyko naruszenia praw lub wolności osoby, której dane dotyczą.".
Należy prowadzić rejest czynności przetwarzania (motyw 82).

Firmy medyczne na podstawie motywu 63 muszą udostępniać zebrane dane. Przykładowo: miałem pakiet medyczny jakiś czas temu w jednej firmie, teraz mam w innej. Jeśli dane w tej pierwszej nie zostały usunięte muszę mieć do nich dostęp. W Polsce Medicover jest już zgodny z RODO.
Jeśli jesteśmy w obszarze medycyny, to warto wspomnieć, że nie można przetwarzać danych wrażliwych na zasadach innych niż szczegółowe (motyw 51).

Prawo do usunięcia danych powinno opierać się na racjonalnym podejściu ("Spełniając ten obowiązek administrator powinien podjąć racjonalne działania z uwzględnieniem dostępnych technologii i dostępnych mu środków, w tym dostępnych środków technicznych, w celu poinformowania administratorów, którzy przetwarzają dane osobowe, o żądaniu osoby, której dane dotyczą." - motyw 66.). Odtwarzanie danych z backupu taśmowego, kasowanie danych per osoba a następnie ponowne zapisywanie backupu nie jest racjonalne.
RODO definiuje czasowe ograniczenie przetwarzania danych (motyw 67): "czasowe przeniesienie wybranych danych osobowych do innego systemu przetwarzania, uniemożliwienie użytkownikom dostępu do wybranych danych", "W zautomatyzowanych zbiorach danych przetwarzanie należy zasadniczo ograniczyć środkami technicznymi w taki sposób, by dane osobowe nie podlegały dalszemu przetwarzaniu ani nie mogły być zmieniane. Fakt ograniczenia przetwarzania danych osobowych należy wyraźnie zaznaczyć w systemie.", co dotyczy m.in. backupu.

Możemy poprosić o wyjęcie swoich danych osobowych i dostarczenie ich nam lub innemu podmiotowi w interoperacyjnym formacie (w praktyce może to być JSON, XML - motyw 68). Ale niekoniecznie parafię. Prowadzenie ksiąg kościelnych jest w celu archiwalnym i w interesie publicznym i z mocy prawa jest zgodne z RODO (motyw 55, 62, 165).

Jeśli przetwarzanie danych osobowych korzysta z automatycznego podejmowania decyzji osoba fizyczna ma prawo do wyrażenia braku zgody na takowe, a administrator musi mieć środki techniczne do wymuszenia zmiany sposobu przetwarzania (motyw 17). Dotyczy to m.in. wniosków bankowych, ubezpieczeniowych, rekrutacyjnych itp.

piątek, maja 04, 2018

EMS HA properties for BW

Defines the name of the System Property controlling the number of attempts the connections make to connect to the server. When too many clients connect to the same server, the server may not be able to accept all connections at the same time. This parameter specifies the number of attempts and delay between the attempt the connections perform in order to connect to the server. The value of this property is a String in the form "NN[,DELAY]" where NN is the number of attempts and DELAY is delay in milliseconds between the attempts. Minimum value of NN is 1, minimum value of DELAY is 250 milliseconds. Default value used is "2,500".

java.property.tibco.tibjms.connect.attempts 999999999,1000
java.property.tibco.tibjms.connect.attempt.timeout 10000

Defines the name of the System Property controlling the number of attempt the connections make to reconnect to the backup server during the fault-tolerant switch. This property is similar to PROP_CONNECT_ATTEMPTS. The difference is that it may be necessary to use different parameters during reconnect than during the initial connect. Initial connect of the clients to the server is normally distributed in time and there are less chances of the server exceeding its maximum accept queue. During fault-tolerant switch, all connected clients automatically try to reconnect to the backup server, approximately at the same time. When the number of connections is large, it may require more attempts to reconnect than the initial connect. The value of this property is a String in the form "NN[,DELAY]" where NN is the number of attempts and DELAY is delay in milliseconds between the attempts. Minimum value of NN is 1, minimum value of DELAY is 250 ms. Default value used is "4,500".

java.property.tibco.tibjms.reconnect.attempts 999999999,1000
java.property.tibco.tibjms.reconnect.attempt.timeout 10000

Defines the name of the System Property setting the ping interval for inactive connections.
When a connection does not send nor receives any data, it may not be able to detect network failure
in certain situations. To avoid this, inactive connections periodically send "ping" messages to the server. Default interval is 60 seconds. In some cases it may take several intervals to detect network failure. The value of this property is a string encoding the ping interval in seconds, e.g. "60".
Zero value disables ping messages.

java.property.tibco.tibjms.ping.interval=10

środa, maja 02, 2018

Communication Within Tesla

Subject: Communication Within Tesla

There are two schools of thought about how information should flow within companies. By far the most common way is chain of command, which means that you always flow communication through your manager. The problem with this approach is that, while it serves to enhance the power of the manager, it fails to serve the company.
Instead of a problem getting solved quickly, where a person in one dept talks to a person in another dept and makes the right thing happen, people are forced to talk to their manager who talks to their manager who talks to the manager in the other dept who talks to someone on his team. Then the info has to flow back the other way again. This is incredibly dumb. Any manager who allows this to happen, let alone encourages it, will soon find themselves working at another company. No kidding.
Anyone at Tesla can and should email/talk to anyone else according to what they think is the fastest way to solve a problem for the benefit of the whole company. You can talk to your manager's manager without his permission, you can talk directly to a VP in another dept, you can talk to me, you can talk to anyone without anyone else's permission. Moreover, you should consider yourself obligated to do so until the right thing happens. The point here is not random chitchat, but rather ensuring that we execute ultra-fast and well. We obviously cannot compete with the big car companies in size, so we must do so with intelligence and agility.
One final point is that managers should work hard to ensure that they are not creating silos within the company that create an us vs. them mentality or impede communication in any way. This is unfortunately a natural tendency and needs to be actively fought. How can it possibly help Tesla for depts to erect barriers between themselves or see their success as relative within the company instead of collective? We are all in the same boat. Always view yourself as working for the good of the company and never your dept.

Thanks,
Elon

piątek, kwietnia 13, 2018

Well designed filesystem with poorly designed cmdline util

This is a story about btrfs and docker build server. Decomissioned hardware with AMD Phenom X4 was brought to life again after Intel Spectre/Meltdown bugs, however problem of not tightly installed RAM modules went unnoticed. Electrical connection between pins was not reliable and from time to time headless server was crashing due to corrupted memory. After cold restart it was working again. Until it was loaded with building docker images. Once ssh failed with I/O error from filesystem and after warm reboot server was dead. After attaching display it was visible that boot process crashed early on btrfs open_ctree_failed.

OK, there is initrd with btrfsck. Let's try btrfsck --repair. According to output there is a disaster.

Let's check what else we have with this tool: -b use the first valid backup root copy. Command line tool did something, but after --repair rerun still nothing. Assessment of situation: brtfs seriously damaged, no backup since it was simple server for building docker images. Nothing important was on disks, everything important was pushed to the cloud. Reinstall Linux, now with ZFS? OK, booting USB installer. Next, next, hmm - installer sees btrfs volumes. How is it possible? Running dmesg. Kernel sees partition, tries to reply transactions but fails with checksums.

OK, now: btrfsck --repair -b --init-csum-tree. Waiting....

Mounting. Now kernel fails with extents. How about: btrfsck --repair -b --init-csum-tree --init-extent-tree?

After many minutes fsck finishes and I'm able to mount fs read write. Listing content and there is /root and /home. Reboot and server is fully operational!

Filesystem is probably rock solid, but fsck is written this way that it totally doesn't help people to recover filesystem.








piątek, kwietnia 06, 2018

Tibco BusinessWorks 5 in Docker is very simple

[builder@box opt]# docker build -t "tibco/eaistack" .
Sending build context to Docker daemon  581.7MB
Step 1/9 : FROM adoptopenjdk/openjdk9-openj9:jdk-9.181
 ---> f5e644bfbf5e
Step 2/9 : MAINTAINER Tibco Developer tibco.developer@company.com
 ---> Using cache
 ---> f72e93d7d0bf
Step 3/9 : ENV PROJECT Project
 ---> Running in 1162b66a8ff7
Removing intermediate container 1162b66a8ff7
 ---> bc4dc5f91389
Step 4/9 : RUN useradd -c 'Tibco user' -m -d /opt/tibco -s /bin/bash tibco
 ---> Running in aadb73ea6fce
Removing intermediate container aadb73ea6fce
 ---> cfa3f370c3ea
Step 5/9 : COPY tibco /opt/tibco
 ---> f755316e4ab5
Step 6/9 : RUN chown -R tibco:tibco /opt/tibco
 ---> Running in ceeca78eff6e
Removing intermediate container ceeca78eff6e
 ---> 7df870209be9
Step 7/9 : USER tibco
 ---> Running in a87922428472
Removing intermediate container a87922428472
 ---> 45581051bfd7
Step 8/9 : ENV HOME /opt/tibco
 ---> Running in 9cc9a18712a1
Removing intermediate container 9cc9a18712a1
 ---> fe1eb6c10268
Step 9/9 : ENTRYPOINT cd /opt/tibco/bw/5.13/bin; ./bwengine /opt/tibco/$PROJECT
 ---> Running in 646514a92838
Removing intermediate container 646514a92838
 ---> b5eaf0052739
Successfully built b5eaf0052739
Successfully tagged tibco/eaistack:latest
[builder@box opt]#

[builder@box opt]# docker run -i -t tibco/eaistack
Using work space directory /opt/tibco/bw/5.13/bin/working/5b987d721310
Creating trace file /opt/tibco/bw/5.13/bin/logs/5b987d721310.log
Using XMLReader org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser
2018 Apr 05 21:28:16:375 GMT +0000 BW.5b987d721310 Info [BW-Core] BWENGINE-300001 Process Engine version 5.13.0, build V24, 2015-8-11
2018 Apr 05 21:28:16:423 GMT +0000 BW.5b987d721310 Info [BW-Core] BWENGINE-300009 BW Plugins: version 5.13.0, build V24, 2015-8-11
2018 Apr 05 21:28:16:433 GMT +0000 BW.5b987d721310 Info [BW-Core] BWENGINE-300010 XML Support: TIBCOXML Version 5.60.0.003
2018 Apr 05 21:28:16:433 GMT +0000 BW.5b987d721310 Info [BW-Core] BWENGINE-300011 Java version: Eclipse OpenJ9 VM 2.9
2018 Apr 05 21:28:16:434 GMT +0000 BW.5b987d721310 Info [BW-Core] BWENGINE-300012 OS version: amd64 Linux 4.15.14-300.fc27.x86_64
2018 Apr 05 21:28:18:770 GMT +0000 BW.5b987d721310 Info [BW-Core] BWENGINE-300013 Tibrv string encoding: UTF-8
creating file: /opt/tibco/bw/5.13/bin/working/5b987d721310/internal/nextJobidBlock
2018 Apr 05 21:28:19:514 GMT +0000 BW.5b987d721310 Info [BW-Core] BWENGINE-300002 Engine 5b987d721310 started
2018 Apr 05 21:28:19:777 GMT +0000 BW.5b987d721310 User [BW-User] - Job-1 [Entrypoint.process/Log]: BW Engine works fine
2018 Apr 05 21:28:19:784 GMT +0000 BW.5b987d721310 Info [BW-Core] BWENGINE-300014 Starting delayed shutdown, max-delay=[0], wait-for-checkpoints=[false]
2018 Apr 05 21:28:19:787 GMT +0000 BW.5b987d721310 Debug [BW-Core]  Shutdown max timeout exceeded, 0 jobs still running
job dispatcher with 8 threads, max queued = 1
2018 Apr 05 21:28:19:791 GMT +0000 BW.5b987d721310 Info [BW-Core] BWENGINE-300006 Engine 5b987d721310 terminating
[builder@box opt]#

[builder@box bw-time]# docker build -t tibco/bw-time .
Sending build context to Docker daemon  49.66kB
Step 1/5 : FROM tibco/eaistack:latest
 ---> b5eaf0052739
Step 2/5 : MAINTAINER Tibco Developer tibco.developer@company.com
 ---> Running in 249c3146f07c
Removing intermediate container 249c3146f07c
 ---> c275aa789efb
Step 3/5 : COPY BW-HTTP-Time /opt/tibco/projects/BW-HTTP-Time
 ---> a4aa2d95814e
Step 4/5 : ENV PROJECT projects/BW-HTTP-Time
 ---> Running in 7f65638aaab0
Removing intermediate container 7f65638aaab0
 ---> 4783982bc9ae
Step 5/5 : EXPOSE 8080
 ---> Running in 433e6a02617d
Removing intermediate container 433e6a02617d
 ---> a02dc0366ab0
Successfully built a02dc0366ab0
Successfully tagged tibco/bw-time:latest
[builder@box bw-time]#

[builder@box bw-time]# docker run -d -p 8090:8080 tibco/bw-time
[builder@box bw-time]# curl http://localhost:8090

Current dateTime is 2018-04-05T22:05:55.22Z




poniedziałek, kwietnia 02, 2018

Spring Framework 5 and Docker








Very soon with shared classes support on OpenJ9 - https://github.com/eclipse/openj9/issues/1244. Now unpack fat jar, delete google collections and run like this:


Please notice that very simple REST service consumes 32MB of disk space. If we have local docker registry it's not a problem. In case we use cloud we can optimize this size creating master docker image with common unpacked libs and then our dockerfile for single application should be derived from this master image. If we need orchestration of Spring applications we should put them inside Docker Swarm's stacks with replica count providing appropriate level of HA - ingress network with own service/name resolving will automagically take care of HA/LB.

Since the hell is frozen you can create Spring 5 application on Linux with Visual Studio Code and push it to Azure as a docker image.


Java - write once, deploy everywhere.






Remark for Eclipse OpenJ9: to control memory settings via environment variables use IBM_JAVA_OPTIONS instead of _JAVA_OPTIONS.

środa, marca 28, 2018

Hot to abuse NVDIMM support in Java 10

Java 10 allows for memory allocation in a place different than plain RAM. The idea was to support Intel Optane and similar things, but we can abuse that feature to run Java applications in compressed memory or in filesystem. Let's play with something small.

Prerequisites:
root@user-Aspire-ES1-431:~# modinfo zram
filename:       /lib/modules/4.14.20-041420-generic/kernel/drivers/block/zram/zram.ko
description:    Compressed RAM Block Device
author:         Nitin Gupta
license:        Dual BSD/GPL
srcversion:     98BCA9B63810EF5DB65BF87
depends:     
retpoline:      Y
intree:         Y
name:           zram
vermagic:       4.14.20-041420-generic SMP mod_unload
signat:         PKCS#7
signer:       
sig_key:     
sig_hashalgo:   md4
parm:           num_devices:Number of pre-created zram devices (uint)
root@user-Aspire-ES1-431:~# modprobe zram num_devices=4
root@user-Aspire-ES1-431:~# echo 1G > /sys/block/zram0/disksize
[ 2562.326469] zram0: detected capacity change from 0 to 1073741824
root@user-Aspire-ES1-431:~# mkfs.ext4 /dev/zram0; mount /dev/zram0 /cmem
mke2fs 1.43.5 (04-Aug-2017)
Discarding device blocks: done                         
Creating filesystem with 262144 4k blocks and 65536 inodes
Filesystem UUID: f8ddae16-ebd4-4615-80c3-8cf60a448526
Superblock backups stored on blocks:
32768, 98304, 163840, 229376

Allocating group tables: done                         
Writing inode tables: done                         
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

We see here that even with filesystem and compression overhead solution AllocateHeapAt zram isn't very slow. We can put Java EE into zram and fit the same set of applications using one node instead of two. Very tempting. Maximum heap size is set to 512MB (fake NV) and we still use RAM.



And now killer feature: run Java application in filesystem (/tmp). Why it is not slow? Linux has got very good filesystem cache.


[pid 31442] openat(AT_FDCWD, "/cmem/storage//jvmheap.d3tNHS", O_RDWR|O_CREAT|O_EXCL, 0600) = 4
[pid 31442] unlink("/cmem/storage//jvmheap.d3tNHS" 
[pid 31442] fallocate(4, 0, 0, 536870912 
[pid 31442] mmap(0xe0000000, 536870912, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FIXED, 4, 0) = 0xe0000000
[pid 31442] close(4)                    = 0

If the name passed to unlink was the last link to a file but any processes still have the file open, the file will remain in existence until the last file descriptor referring to it is closed. Access to nvdimm memory visible as filesystem and allocated via files must be secure. No other process should be able to alter memory file and unlink is used for that together with exclusive file access. The munmap() system call deletes the mappings for the specified address range, and causes further references to addresses within the range to generate invalid memory references. The region is also automatically unmapped when the process is terminated. On the other hand, closing the file descriptor does not unmap the region. It is not possible for any Java thread to access file descriptor of memory file, because this descriptor is gone. Security gives us also good cleanup.

In case heap is mmaped from /tmp we use memory from filesystem buffers - we have swapping at application level, controlled by us, not by the OS which can hit any application. In case of zram we have transparent memory compression.

środa, marca 07, 2018

Dynatrace OneAgent and Tibco

Dynatrace dynamically injects own JMS properties for tracing. Seeing the same identifier on service provider and client association can be deduced.

Tracing HTTP activities inject HTTP header.

Here is traced SOAP WS call.

BW has got a bug of closing ServletOutputStream twice. With some tracing overhead Tomcat is fast enought to recycle buffer before next close() and Dynatrace (without special workaround walks) into NullPointerException.

Thanks to injected tracing Smartscape can draw a network of connections between services.

Tibco is supported with generic HTTP and JMS approach. 


Dyntrace shows us a nice profiling statistics, however it is not aware about Tibco BW process definitions, so we get everything in one bag.