Adott egy listener microservice, gyakorlatilag ket halozati zona kozt proxyzik. Spring Boot app, egy controller, ket interceptor a ki-, es bemeno oldalon, meg egy service osztaly, hogy megse mar a contollerben legyen minden.
Tok jo, meg minden, Postman requestekkel developer gepen megy frankon. Kitesszuk dev-re, megy frankon. Staging, postmannel megy, eles adattal, nem megy... Hosszas kinlodas utan kideritettuk, hogy a bejovo requestet nem feltetlenul pontosan irja le a dokumentacio, szoval gyorsan hozzaigazitottuk a kodot. Developer gepen, dev serveren Postmannel tokeletes. Staging NullPointerezik.
Meg hosszasabb szenvedes utan (mivel staginghez JMX mar nem jar) kiderul, hogy a controller nem kapja meg az adatot, a request object nullokat tartalmaz. Fogalmunk sincs mi lehet, sok-sok google, trial and error, szenvedes es szivas.
1-2 nap megint eltellik, mar ott jarunk, hogy az interceptorban meg megvan az adat meg stagingen is, viszont a controllerben mar nincs. Szoval azt, hogy az nginx nyelne le, vagy a Tomcat dobna el a POST body-t, azt sikeresen kizartuk. Kizartuk azt is, hogy a HttpServletRequest inputStream-jet piszkalnank, amivel esetleg consumed allapotba kerulne, ezaltal olvashatatlalanna valva.
Kiderult, hogy a Java verzio nagyban kulonbozott a harom rendszeren, Fejlesztoi gep Java 8, dev server Java 8, staging Java 7. Hogy honnan szedte ezt ossze a Puppet, fogalmam sincs (infrastukturas sracok is csak neztek, hiszen amit irtak, az Java 8-at tartalmazott). Ezt gyorsan javitottuk, hatha a sevlet API valtozott valahogy, nagyjabol hasonlo Java verziora hozva: stage meg mindig nem megy.
Oke, Tomcat verzio. Mind harom rendszeren kicsit kulonbozo van. Stage-t hozzaigazitjuk a dev serverhez. Semmi. Uj kollega szuz rendszeren: szinten megy.
Lassan csak az OS kulonbozo, macOS fejlesztoi gepeken megy, CentOS 6.9(?) a dev serveren, CentOS 7.4(?) stagingen. Osszerakunk egy Docker image-t CentOS 7 image-dzsel, ugyanazzal a Java, Tomcat verzioval, Es reprodukaltuk!
Csak vicceltem, meg mindig rendesen mukodik az app.
Es lassan kifogytam az otletekbol. Fogalmam sincs, hogy mi okozhatja, hogy ugyanaz a war file a fejlesztoi gepeken, a docker containerben, a dev serveren megy, stagingen nem.
Kozben van egy PoC workaround megoldasunk egy Tomcat filterrel, ami elteszi session valtozoba az adatot, amit a controllerben kiolvasunk, de azert na, ez nem az igazi...
X-akta?