Differences

This shows you the differences between two versions of the page.

Link to this comparison view

irc:1486940400 [2017/05/27 13:44] (current)
Line 1: Line 1:
 +[02:16:44] *** ChanServ sets mode: +o temporalfox
 +
 +[09:30:29] <​matrium>​ hi, is there something like a recover for futures? like a right biased compose?
 +
 +[09:37:11] <​temporalfox>​ matrium what do you mean ?
 +
 +[09:45:57] <​matrium>​ @temporalfox:​ I have a computation that is a composition of monadic functions of the form A -> Future<​B>​. One of the functions might fail but I can recover from that, depending on the exception.
 +
 +[09:47:56] <​temporalfox>​ what objects are you using ?
 +
 +[09:48:31] <​matrium>​ Given that Future is a Sum type like Either in other languages, I was looking for something like "​recover"​
 +
 +[09:50:07] <​matrium>​ recover(Future<​T>​ future, Function<​Throwable,​ Future<​T>>​ f) : Future<​T>​ future
 +
 +[09:55:06] <​temporalfox>​ how do you call recover ?
 +
 +[09:55:30] <​temporalfox>​ ah I see
 +
 +[09:55:37] <​temporalfox>​ a bit like onErrorReturn in RxJava ?
 +
 +[09:55:46] <​temporalfox>​ (but with a future)
 +
 +[09:56:14] <​temporalfox>​ but isn't it like a flatMap a bit ?
 +
 +[09:56:56] <​matrium>​ temporalfox:​ well, my understanding was that flatMap is Future.compose
 +
 +[09:57:01] <​temporalfox>​ if the future is ok, the function applies the same value
 +
 +[09:57:02] <​temporalfox>​ ys
 +
 +[09:57:03] <​temporalfox>​ yes
 +
 +[09:57:25] <​temporalfox>​ compose is like flatMap, we called this way as it makes sounds less functionnal and more pragmatic
 +
 +[09:57:48] <​temporalfox>​ the future type does not aim to be much functionnal in vertx
 +
 +[09:58:06] <​temporalfox>​ yet it wants to provide basic features one expect to work with
 +
 +[09:58:24] <​temporalfox>​ I'd like some improvements though like
 +
 +[09:58:29] <​temporalfox>​ onSuccess / onError / onComplete
 +
 +[09:58:37] <​temporalfox>​ to ease its usage
 +
 +[09:59:36] <​matrium>​ one thing I'm missing as well is a Future<​A>​.compose(Future<​B>​) : Future<​B>​
 +
 +[10:00:07] <​matrium>​ like Future<​A>​.map(B) : Future<​B>​
 +
 +[10:01:34] <​matrium>​ should probably be Future<​A>​.compose(Supplier<​Future<​B>>​) because of lazyness
 +
 +[10:02:59] <​temporalfox>​ what does compose(Future<​B>​) do ?
 +
 +[10:03:17] <​temporalfox>​ ah
 +
 +[10:03:24] <​temporalfox>​ with a constant
 +
 +[10:03:40] <​temporalfox>​ map(constant) was added for pragmatic reason as shortcut
 +
 +[10:03:47] <​temporalfox>​ like on AsyncResult
 +
 +[10:04:00] <​temporalfox>​ you can turn an AsyncResult<​Foo>​ in an AsyncResult<​Void>​ easily
 +
 +[10:04:03] <​temporalfox>​ ar.map(null)
 +
 +[10:04:09] <​temporalfox>​ and often we have to do this conversion in vertx
 +
 +[10:04:24] <​temporalfox>​ so it avoids the idiom : if (ar.succeeded()) ...
 +
 +[10:04:51] <​matrium>​ yes, but in some cases you just want to perform a certain operation, is the previous operation was successfull but you don't are about the result
 +
 +[10:05:00] <​matrium>​ is = if
 +
 +[10:05:24] <​temporalfox>​ it's like chaining a bit
 +
 +[10:05:31] <​temporalfox>​ but on completion hatever the result is
 +
 +[10:06:43] <​temporalfox>​ we don't support yet lazy values in the code generator
 +
 +[10:06:54] <​temporalfox>​ so it would be somehting like Function<​Void,​ Future> which sucks a bit
 +
 +[10:07:00] <​matrium>​ if you have a function Future<​A>​ f() {...}, you want to perform after a computation,​ you have to write .compose(x -> f()), instead of just writing compose(this::​f)
 +
 +[10:07:17] <​temporalfox>​ matrium makes sense
 +
 +[10:08:05] <​temporalfox>​ that would mean to support Supplier in the code generators
 +
 +[10:08:53] <​matrium>​ another cool thing would be a map_ (and compose_) for constant values, that accept a suppliert
 +
 +[10:15:18] <​temporalfox>​ what would it be ?
 +
 +[10:18:25] <​matrium>​ e.g. in scala the underscore at the end is an indicator, that the previous result is ignored
 +
 +[10:20:01] <​matrium>​ otherwise it can be a little tricky with implicit function conversion when calling an overloaded map
 +
 +[10:21:14] <​temporalfox>​ ok
 +
 +[10:21:26] <​temporalfox>​ do you know that vertx-lang-scala just got on central today ?
 +
 +[10:22:33] <​temporalfox>​ hi ppatiern
 +
 +[10:22:40] <​matrium>​ Nice to hear :-) unfortunately I'm forced to use Java for work :-/
 +
 +[10:22:44] <​ppatiern>​ hi temporalfox
 +
 +[10:23:02] <​temporalfox>​ matrium that being said you can give a try and provide feedback as you seem to have experience
 +
 +[10:23:08] <​temporalfox>​ ppatiern how is it going ?
 +
 +[10:24:12] <​ppatiern>​ after the first hour this morning ... I had to switch on Hono ... I'll come back to the Vert.x Kafka later today ... I have to remove the connect and modifying tests that today use the create with the handler (that we don't need anymore)
 +
 +[10:24:34] <​temporalfox>​ ok
 +
 +[10:24:38] <​temporalfox>​ I will spend some time on doc
 +
 +[10:24:43] <​temporalfox>​ to ake it less compact
 +
 +[10:24:45] <​ppatiern>​ ok
 +
 +[10:24:52] <​temporalfox>​ i.e just break in sentences
 +
 +[10:25:01] <​ppatiern>​ ok
 +
 +[10:25:07] <​temporalfox>​ and I'll try to add other languages
 +
 +[10:25:11] <​temporalfox>​ and see what is missing around
 +
 +[10:25:19] <​temporalfox>​ also I'll try to make some rxdoc
 +
 +[10:25:41] <​ppatiern>​ when the release is supposed to be ?
 +
 +[10:25:49] <​ppatiern>​ I mean for the final 3.4.0
 +
 +[10:27:34] <​temporalfox>​ end of this month
 +
 +[10:41:31] <​ppatiern>​ ok .. it's even important for Hono and the Eclipse CQs related to the used MQTT server :-)
 +
 +[10:51:45] <​matrium>​ temporalfox:​ http://​pastebin.com/​y4z0w8tW that's an example of the recover use case
 +
 +[11:24:32] <​ppatiern>​ temporalfox:​ do you know why IntelliJ gives me following error on compiling ?
 +
 +[11:24:37] <​ppatiern>​ Error:(7, 45) java: package io.vertx.rxjava.kafka.client.consumer does not exist
 +
 +[11:24:41] <​ppatiern>​ Error:(25, 11) java: cannot find symbol
 +
 +[11:24:41] <​ppatiern> ​  ​symbol: ​  class KafkaConsumer
 +
 +[11:24:41] <​ppatiern> ​  ​location:​ class io.vertx.kafka.client.tests.RxConsumerTest
 +
 +[11:24:45] <​ppatiern>​ Error:(51, 16) java: cannot find symbol
 +
 +[11:24:45] <​ppatiern> ​  ​symbol: ​  ​variable KafkaConsumer
 +
 +[11:24:45] <​ppatiern> ​  ​location:​ class io.vertx.kafka.client.tests.RxConsumerTest
 +
 +[11:24:49] <​ppatiern>​ the mvn compile works like a charm
 +
 +[11:24:50] <​temporalfox>​ do mvn clean compile
 +
 +[11:25:07] <​temporalfox>​ the class should be in target/​annotations/​...
 +
 +[11:25:12] <​temporalfox>​ check your IDE can see it
 +
 +[11:25:14] <​temporalfox>​ best
 +
 +[11:25:16] <​ppatiern>​ already done
 +
 +[11:25:18] <​temporalfox>​ do rm -rf .idea
 +
 +[11:25:18] <​ppatiern>​ nothing
 +
 +[11:25:24] <​temporalfox>​ rmoeve the .iml file
 +
 +[11:25:26] <​temporalfox>​ and  reimport
 +
 +[11:25:36] <​temporalfox>​ it's because we added it after you imported the project
 +
 +[11:25:40] <​ppatiern>​ ok
 +
 +[11:25:44] <​ppatiern>​ I'll try thatnks
 +
 +[11:28:55] <​ppatiern>​ nothing ...
 +
 +[11:29:00] <​ppatiern>​ rm -rf .idea
 +
 +[11:29:03] <​ppatiern>​ removed .iml
 +
 +[11:29:07] <​ppatiern>​ mvn clean compile
 +
 +[11:29:09] <​ppatiern>​ reimport
 +
 +[11:29:11] <​ppatiern>​ same error
 +
 +[11:31:25] <​temporalfox>​ ok
 +
 +[11:31:27] <​temporalfox>​ weird
 +
 +[11:31:50] <​temporalfox>​ are you on kafka ?
 +
 +[11:35:07] <​ppatiern>​ on kafka ?
 +
 +[11:54:16] <​ppatiern>​ temporalfox:​ even after a mvn clean compile I don't have a target/​annotations folder
 +
 +[11:54:52] <​temporalfox>​ hum
 +
 +[11:55:05] <​ppatiern>​ the intellij compiler gives me the above errors but not signaling them on the source code (with a red line)
 +
 +[11:55:08] <​temporalfox>​ yes I asked because I will do stuff on this this afternoon
 +
 +[11:55:25] <​temporalfox>​ "ls target/​generated-sources/​annotations/​io/​vertx/"​
 +
 +[11:55:30] <​temporalfox>​ so we can finish early this week
 +
 +[11:55:38] <​temporalfox>​ and integrate it in the stack and website
 +
 +[11:55:44] <​ppatiern>​ oh yes
 +
 +[11:55:49] <​ppatiern>​ I have that path
 +
 +[11:56:12] <​temporalfox>​ I said the wrong one :-)
 +
 +[11:56:17] <​temporalfox>​ but intellij should add it to the path
 +
 +[11:56:34] <​temporalfox>​ for me it is blue
 +
 +[11:56:39] <​temporalfox>​ with a small fan
 +
 +[11:56:40] <​ppatiern>​ the strange thing is that the error doesn'​t appear in the source code
 +
 +[11:56:54] <​temporalfox>​ "​Generated Source Roots"
 +
 +[11:57:02] <​ppatiern>​ the intellisense is working and can see the class
 +
 +[11:59:57] <​ppatiern>​ in INtelliJ ... the Source Folders are
 +
 +[12:00:03] <​ppatiern>​ src/​man/​Java ... ok
 +
 +[12:00:08] <​ppatiern>​ src/​main/​generated ... ok
 +
 +[12:00:25] <​ppatiern>​ and target/​../​annotations
 +
 +[12:00:46] <​ppatiern>​ target/​generated-sources/​annotations
 +
 +[12:01:31] <​temporalfox>​ so it  works ?
 +
 +[12:02:01] <​ppatiern>​ nope
 +
 +[12:02:15] <​ppatiern>​ the intellisense can see it ...
 +
 +[12:02:20] <​ppatiern>​ the compiler give me the errors
 +
 +[12:05:14] <​ppatiern>​ it compiles if I set a source folder the entire folder path to the KafkaConsumer (under io.vertx.rxjava.kafka.client)
 +
 +[12:05:21] <​ppatiern>​ but in this case the intellisense doesn'​t work !
 +
 +[12:05:36] <​ppatiern>​ what are your source folders in the project structure ?
 +
 +[13:17:02] <​temporalfox>​ I'm using default drag and drop of project folder on intellij icon in OSX
 +
 +[13:36:20] <​aslaikov>​ hi! is there anyone alive? :)
 +
 +[13:43:45] <​aslaikov>​ does anyone use vertx jdbc with postgres? I'm trying to make a POST request and make an insert to database but it all just hangs... here is the gist: https://​gist.github.com/​slaykovsky/​e51d271ee4d9b19b20edd2f748aeaed4
 +
 +[13:59:26] <​temporalfox>​ have you looked at the examples aslaikov ?
 +
 +[14:00:03] <​aslaikov>​ temporalfox,​ yup, it's almost from there :)
 +
 +[14:00:47] <​temporalfox>​ and the original exampl does not work ?
 +
 +[14:01:40] <​aslaikov>​ temporalfox,​ IDK honestly, I've just made my one as this example
 +
 +[14:22:06] <​msavy>​ if i have multiple HttpClients with different HttpClientOptions (e.g. different SSL configs), is an LRUCache of HttpClient a sensible thing to do?
 +
 +[14:22:28] <​msavy>​ and said HttpClients will be reused multiple times.
 +
 +[14:22:47] <​msavy>​ not quite sure whether there is already some magic under the covers to provide this (don't think so, but thought i'd check)
 +
 +[17:34:24] <​temporalfox>​ msavy I don't understand what your use case
 +
 +[17:34:35] <​temporalfox>​ ppatiern I'm gonna do some kafka things tonight
 +
 +[17:34:39] <​temporalfox>​ on the branch
 +
 +[17:34:51] <​temporalfox>​ hopefully we can converge on something by wedesneday
 +
 +[17:35:01] <​ppatiern>​ temporalfox:​ ok !
 +
 +[17:35:43] <​msavy>​ temporalfox:​ so, for example, let's imagine i'm proxying to 10 different APIs - hence i have 10 different HttpClients constructed with unique HttpClientOptions configurations.
 +
 +[17:35:53] <​temporalfox>​ btw ppatiern concerning doc : you can read the groovy file now it shows all the code
 +
 +[17:36:00] <​temporalfox>​ but before it shows "code not translatable"​
 +
 +[17:36:12] <​temporalfox>​ that's how you endup using the translatable api
 +
 +[17:36:41] <​temporalfox>​ ah
 +
 +[17:36:50] <​temporalfox>​ you have something very dynamic
 +
 +[17:37:01] <​msavy>​ and i could keep them in an LRUMap rather than making a new client + configuration for each request that comes through to the same
 +
 +[17:37:05] <​temporalfox>​ btw in latest beta msavy you can now use ssl / non ssl in same client
 +
 +[17:37:06] <​msavy>​ to the same API*
 +
 +[17:37:14] <​temporalfox>​ so you don't need ssl / non ssl clients
 +
 +[17:37:15] <​msavy>​ temporalfox:​ ah, that's awesome, woo!
 +
 +[17:37:28] <​temporalfox>​ msavy and we added RequestOptions
 +
 +[17:37:31] <​temporalfox>​ to override
 +
 +[17:37:39] <​temporalfox>​ to use ssl = true / false
 +
 +[17:37:43] <​temporalfox>​ instead of overloading API
 +
 +[17:37:53] <​temporalfox> ​  ​private String host;
 +
 +[17:37:53] <​temporalfox> ​  ​private int port;
 +
 +[17:37:54] <​temporalfox> ​  ​private boolean ssl;
 +
 +[17:37:55] <​temporalfox> ​  ​private String uri;
 +
 +[17:38:05] <​msavy>​ so i can set the keystores at that point?
 +
 +[17:38:10] <​temporalfox>​ no
 +
 +[17:38:16] <​temporalfox>​ the keystores are at the client level
 +
 +[17:38:30] <​temporalfox>​ I did not want to make it too complex
 +
 +[17:38:41] <​temporalfox>​ given that there is now a pool for ssl and one for non ssl
 +
 +[17:38:51] <​temporalfox>​ (obviously)
 +
 +[17:38:51] <​msavy>​ makes sense. that's the main limitation for us. mutual TLS with different backends.
 +
 +[17:39:02] <​temporalfox>​ what is this use case ?
 +
 +[17:39:25] <​msavy>​ so, let's imagine you offer your API via apiman, and are colocated with lots of different providers
 +
 +[17:39:28] <​temporalfox>​ msavy you could do an LRUMap if you use keep alive otherwise its useless
 +
 +[17:39:58] <​msavy>​ you want to secure the connection between apiman and the backend, so people can't "call around"​ the gateway. people do that with MTLS (per API).
 +
 +[17:39:58] <​temporalfox>​ ok
 +
 +[17:40:07] <​temporalfox>​ and each provider has its own set of certs ?
 +
 +[17:40:26] <​temporalfox>​ one thing you could do
 +
 +[17:40:34] <​msavy>​ we do use keep-alive, yes
 +
 +[17:40:46] <​msavy>​ which is on by default afaik?
 +
 +[17:40:52] <​temporalfox>​ is to have your own TrustOptions implementation
 +
 +[17:41:00] <​temporalfox>​ and implement
 +
 +[17:41:01] <​temporalfox> ​  ​default TrustManagerFactory getTrustManagerFactory(Vertx vertx) throws Exception {
 +
 +[17:41:01] <​temporalfox> ​    ​return KeyStoreHelper.create((VertxInternal) vertx, this).getTrustMgrFactory((VertxInternal) vertx);
 +
 +[17:41:03] <​temporalfox> ​  }
 +
 +[17:41:12] <​temporalfox>​ but I don't know how it would work with respect to connection pool
 +
 +[17:41:17] <​temporalfox>​ I don't think it would be a good idea
 +
 +[17:41:24] <​temporalfox>​ yes keep alive is default
 +
 +[17:41:32] <​msavy>​ hmm, yes, that's what i was wondering - specifically how the threadpool worked in this respect. ok, awesome.
 +
 +[17:41:41] <​temporalfox>​ it's connection pool
 +
 +[17:41:44] <​msavy>​ thanks for your advice. much appreciated!
 +
 +[17:42:01] <​msavy>​ also, those new additions are great for us, i can simplify some of our code :)
 +
 +[17:42:10] <​temporalfox>​ I think the best is that indeed you keep a Map<​Provider,​ HttpClient>​
 +
 +[17:42:22] <​temporalfox>​ and keep the client as long as it has open connections
 +
 +[17:42:59] <​temporalfox>​ msavy yes, having a good http client is important
 +
 +[17:43:19] <​msavy>​ at the moment i seem to be leaking file-handles somewhere, trying to find exactly where
 +
 +[17:43:30] <​msavy>​ i must have forgotten to close something
 +
 +[17:43:32] <​temporalfox>​ that happens if you don't close things
 +
 +[17:43:46] <​msavy>​ exactly, lol - but i haven'​t managed to track it down yet
 +
 +[17:43:55] <​msavy>​ turns out this is a bit of a pain
 +
 +[17:44:15] <​msavy>​ solution - just keep increasing the number of file handles ;-)!!
 +
 +[17:44:32] <​msavy>​ (NB: joke; please don't do this)
 +
 +[17:45:04] <​temporalfox>​ on osx, the number of handles is quite limited
 +
 +[17:45:11] <​temporalfox>​ at some poitn we had leaks in vertx test suite
 +
 +[17:45:17] <​temporalfox>​ so it was not passing anymore
 +
 +[17:45:19] <​msavy>​ i raised it up to...
 +
 +[17:45:34] <​temporalfox>​ I tracked them down with netstat
 +
 +[17:45:41] <​temporalfox>​ and I don't remember what else
 +
 +[17:45:44] <​msavy>​ 262144
 +
 +[17:45:51] <​temporalfox>​ I kept the default
 +
 +[17:46:12] <​temporalfox>​ it's quite easy to forget that
 +
 +[17:46:22] <​temporalfox>​ oen event loop == one descriptor
 +
 +[17:47:34] <​msavy>​ thanks for your help temporalfox!
 +
 +[17:47:40] <​temporalfox>​ no problem
 +
 +[17:47:43] <​msavy>​ and yeah, this will be fun to find; only occurs during load testing.
 +
 +[17:47:45] <​temporalfox>​ I'm happy to help
 +
 +[17:48:03] <​temporalfox>​ I think that what I did was to match the code
 +
 +[17:48:12] <​temporalfox>​ and capture a stack trace when it's created
 +
 +[17:48:17] <​temporalfox>​ and print it in finalizer
 +
 +[17:48:23] <​temporalfox>​ or something like that
 +
 +[17:48:24] <​temporalfox>​ but it was in test suite
 +
 +[17:48:27] <​msavy>​ hmm, interesting idea
 +
 +[17:48:28] <​temporalfox>​ or I used a thread
 +
 +[17:48:35] <​temporalfox>​ and long connetion where printed
 +
 +[17:48:52] <​temporalfox>​ I think you can do that with byteman easily
 +
 +[17:49:00] <​msavy>​ yeah, that's what the perf guys just suggested to me
 +
 +[17:49:26] <​msavy>​ do you use mac btw?
 +
 +[17:49:36] <​msavy>​ i added byteman to brew
 +
 +[17:50:19] <​ppatiern>​ temporalfox:​ running a Vert.x application on OpenShift we received error on access denied because Vert.x tries to create a .vertx folder in the current dir. I just workaround the problem with vertx.disableFileCaching=true and vertx.disableFileCPResolving=true ... but can you explain me better the use case of file caching needed and what is the FileCPResolving ?
 +
 +[17:50:45] <​temporalfox>​ ppatiern it's because of loading resoures from a jar file in fatjar mode
 +
 +[17:50:49] <​temporalfox>​ it's blocking
 +
 +[17:50:57] <​temporalfox>​ so we don't want to block too much
 +
 +[17:51:45] <​ppatiern>​ so it's needed when the application has some rsources to access ?
 +
 +[17:53:16] <​ppatiern>​ disabling it means having application blocking but still working ?
 +
 +[17:53:29] <​ppatiern>​ why two parameters ? what is the related mean for both of them ?
 +
 +[17:53:30] <​temporalfox>​ yes it means it's going to go in the classloader thing
 +
 +[17:53:48] <​temporalfox>​ vertx.disableFileCPResolving means loading files from jars
 +
 +[17:53:57] <​temporalfox>​ like getResourceAsStream
 +
 +[17:54:02] <​temporalfox>​ it's not the same
 +
 +[17:54:30] <​ppatiern>​ so the file caching creates the .vertx folder right ?
 +
 +[17:54:46] <​temporalfox>​ yes
 +
 +[17:54:53] <​temporalfox>​ it's also use dby some other components
 +
 +[17:54:55] <​temporalfox>​ like vertx web
 +
 +[17:55:05] <​ppatiern>​ but the does FileCPResolving access to the disk for writing ?
 +
 +[17:55:24] <​ppatiern>​ because on OpenShift I need both disabled
 +
 +[17:55:50] <​ppatiern>​ and on Openshift you can't write in the current folder ... you need an external volume
 +
 +[17:59:22] <​temporalfox>​ no I think it will keep it in memory
 +
 +[17:59:23] <​temporalfox>​ ppatiern
 +
 +[17:59:25] <​temporalfox>​ props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,​ StringDeserializer.class);​
 +
 +[17:59:34] <​temporalfox>​ is it possible to use it with String ?
 +
 +[17:59:39] <​temporalfox>​ and map ?
 +
 +[18:02:47] <​ppatiern>​ instead of Properties and the enums you mean ?
 +
 +[18:03:11] <​temporalfox>​ yes
 +
 +[18:03:12] <​ppatiern>​ i.e.
 +
 +[18:03:22] <​temporalfox>​ I'm trying to show ocnfig with map only
 +
 +[18:03:23] <​temporalfox>​ in the doc
 +
 +[18:03:39] <​ppatiern>​ map.put("​key_deserializer_class_....",​ "​org.apache.kafka....StringDeserializer"​);​
 +
 +[18:04:19] <​ppatiern>​ yes because I used this way in my AMQP kafka bridge ... even if for being polyglot we are losing a lot of Java cookies :-)
 +
 +[18:04:22] <​temporalfox>​ ok
 +
 +[18:04:27] <​temporalfox>​ yes but it's fine
 +
 +[18:04:34] <​temporalfox>​ it's simple
 +
 +[18:04:38] <​temporalfox>​ that's the important thing
 +
 +[18:06:57] <​ppatiern>​ being polyglot ?
 +
 +[18:07:04] <​temporalfox>​ no
 +
 +[18:07:11] <​temporalfox>​ wether you use a string or a class
 +
 +[18:07:15] <​temporalfox>​ actually a string is more readable
 +
 +[18:07:18] <​temporalfox>​ that a constant
 +
 +[18:07:24] <​temporalfox>​ or a class literal
 +
 +[18:07:46] <​ppatiern>​ but more error prone
 +
 +[18:08:27] <​temporalfox>​ https://​github.com/​vert-x3/​vertx-kafka-client/​blob/​docs-editing/​src/​main/​asciidoc/​groovy/​index.adoc
 +
 +[18:08:36] <​temporalfox>​ I'm pushing there the docs editing
 +
 +[18:09:28] <​temporalfox>​ I hope to finish that tonight
 +
 +[18:09:35] <​temporalfox>​ it should be ok you did most of it :-)
 +
 +[18:09:38] <​ppatiern>​ the "​Getting topic partitions information"​ is at a lower level .. it's wrong (my fault) can you fix it
 +
 +[18:09:42] <​temporalfox>​ just breaking it down into smaller pieces
 +
 +[18:10:01] <​ppatiern>​ it should be at same level of others
 +
 +[18:10:03] <​temporalfox>​ yes
 +
 +[18:10:07] <​temporalfox>​ I removed one level of indent
 +
 +[18:10:13] <​temporalfox>​ with Getting Started
 +
 +[18:10:22] <​temporalfox>​ should do the same with mqtt-server
 +
 +[18:10:28] <​ppatiern>​ ah ok
 +
 +[18:10:40] <​temporalfox>​ it's more readable
 +
 +[18:10:50] <​ppatiern>​ agree
 +
 +[18:10:52] <​temporalfox>​ docs is readable by being linear and small chunks
 +
 +[18:11:04] <​temporalfox>​ I'm just taking your doc
 +
 +[18:11:10] <​temporalfox>​ and break it into small chunks
 +
 +[18:11:54] <​ppatiern>​ you know better than me the right format for the doc
 +
 +[18:12:02] <​temporalfox>​ I pushed the indent
 +
 +[18:12:08] <​ppatiern>​ btw just coming back to disableFileCPResolving,​ you said that it doesn'​t try to write on disk ... but with this enabled ... a Vert.x app on OpenShift doesn'​t run with access denied error :(
 +
 +[18:12:10] <​temporalfox>​ maybe :-)
 +
 +[18:12:32] <​temporalfox>​ I htink to run vertx on openshift the best is to reach clement
 +
 +[18:12:37] <​temporalfox>​ he has the best advices for openshift
 +
 +[18:13:17] <​ppatiern>​ ok thanks !
 +
 +[18:13:27] <​temporalfox>​ I told him you are looking for him :-)
 +
 +[18:13:35] <​cescoffier>​ hi
 +
 +[18:13:36] <​temporalfox>​ cescoffier is there :-)
 +
 +[18:13:41] <​cescoffier>​ @ppatiern looking for me ?
 +
 +[18:13:50] <​temporalfox>​ ppatiern wants all the best advices for running vertx on openshift
 +
 +[18:14:29] <​cescoffier>​ use the fabric8 maven plugin and everything is going to be almost automatic
 +
 +[18:14:35] <​ppatiern>​ cescoffier: I was writing an email ... but you could read the conversation I had with Julien
 +
 +[18:15:00] <​ppatiern>​ but I want to know the meaning of file caching and disableFileCPResolving that I need always to disable
 +
 +[18:15:16] <​ppatiern>​ in order to avoid "​denied access"​ ... so like something is trying to write in the local folder
 +
 +[18:15:36] <​cescoffier>​ so, the hint is.... relocate .vertx to /tmp
 +
 +[18:15:46] <​cescoffier>​ what are you using to deploy on openshift ?
 +
 +[18:15:54] <​cescoffier>​ f-m-p ? docker file ?
 +
 +[18:15:57] <​cescoffier>​ template ?
 +
 +[18:16:06] <​ppatiern>​ I use the fabric8 plugin just to generate yaml files
 +
 +[18:16:16] <​ppatiern>​ I don't want and automatic deployment for now
 +
 +[18:16:32] <​ppatiern>​ just generated yml files and then deploy them manually
 +
 +[18:16:46] <​cescoffier>​ are you using a recent fabric8 mavne plugin ?
 +
 +[18:17:05] <​cescoffier>​ it should generate a yaml file with a java -jar .... -Dvertx.baseCacheDir=/​tmp
 +
 +[18:17:10] <​cescoffier>​ (let me check the exact name)
 +
 +[18:18:43] <​cescoffier> ​          - name: JAVA_OPTIONS
 +
 +[18:18:43] <​cescoffier> ​            ​value:​ -Dvertx.cacheDirBase=/​tmp
 +
 +[18:19:15] <​ppatiern>​ can you give me a reference link for that ... thanks !
 +
 +[18:20:46] <​cescoffier>​ it's actually generated by the fabric8 mavne plugin if it detects a vert.x app
 +
 +[18:21:16] <​cescoffier>​ https://​github.com/​fabric8io/​fabric8-maven-plugin/​blob/​master/​generator/​vertx/​src/​main/​java/​io/​fabric8/​maven/​generator/​vertx/​VertxGenerator.java#​L60
 +
 +[18:21:59] <​ppatiern>​ thanks !
 +
 +[18:22:36] <​ppatiern>​ btw the current Eclipse Hono project uses the docker maven plugin ... I'm converging to use only the fabric8
 +
 +[18:22:48] <​cescoffier>​ here you have plenty of examples: https://​github.com/​cescoffier/​vertx-openshift-it
 +
 +[18:22:55] <​ppatiern>​ but for now the docker plugin is still there for building docker image and the fabric8 is there for yml generation
 +
 +[18:23:11] <​cescoffier>​ hum... not anymore
 +
 +[18:23:19] <​ppatiern>​ but I'll converge to use only fabric8 plugin for building images and yaml files
 +
 +[18:23:27] <​cescoffier>​ you can't access the docker registry of an openshift anymore
 +
 +[18:23:39] <​cescoffier>​ (except if you open it explicitely)
 +
 +[18:24:09] <​cescoffier>​ the "​only"​ "​work-everywherE"​ way is S2I
 +
 +[18:24:20] <​ppatiern>​ I know
 +
 +[18:24:25] <​cescoffier>​ fortunately the fabric8 maven plugin do s2i build for you
 +
 +[18:25:57] <​ppatiern>​ yes
 +
 +[18:26:50] <​aslaikov>​ all: any chance someone does use vertx with postgres? :)
 +
 +[18:27:50] <​cescoffier>​ if you are still using the docker way, just use something like: https://​github.com/​cescoffier/​vertx-openshift-it/​blob/​master/​simple-http-it/​pom.xml
 +
 +[18:28:37] <​cescoffier>​ sorry, wrong link: https://​drive.google.com/​file/​d/​0BydR6oxED8IXeFVlQU05eFlNZzQ/​view?​usp=sharing
 +
 +[18:29:09] <​cescoffier>​ aslaikov : yes, either with the vert.x jdbc client, or the vertx-postgres-client
 +
 +[18:29:44] <​aslaikov>​ cescoffier, hi mate! :) could you please take a look at https://​gist.github.com/​slaykovsky/​e51d271ee4d9b19b20edd2f748aeaed4
 +
 +[18:30:07] <​aslaikov>​ cescoffier, it just hangs on this post and I don't know what should I do...
 +
 +[18:31:14] <​cescoffier>​ what does this: " ​           SQLConnection conn = ctx.get("​conn"​);"​
 +
 +[18:31:53] <​cescoffier>​ I'm not sure you can do that. You should open a new connection in your method and close it
 +
 +[18:33:27] <​aslaikov>​ cescoffier, but I have a wildcard route which saves connection to context https://​gist.github.com/​slaykovsky/​f0550dafa7312af85ebe2b048f219d4e
 +
 +[18:34:16] <​cescoffier>​ this is not the right method: addHeadersEndHandler
 +
 +[18:34:52] <​aslaikov>​ cescoffier, and my get and delete routes are working very well, only this post isn'​t... :(
 +
 +[18:35:04] <​aslaikov>​ cescoffier, why?
 +
 +[18:35:29] <​cescoffier>​ because this method is closing the connection just after having sent the header, not the payload
 +
 +[18:36:01] <​cescoffier>​ well, in your case it should not matter, as you don't write the header in advance
 +
 +[18:36:34] <​cescoffier>​ are you sure it hangs in the JDBC call ?
 +
 +[18:36:54] <​aslaikov>​ cescoffier, no I'm not sure
 +
 +[18:38:24] <​aslaikov>​ cescoffier, all I know is that curl tells me that upload completely sent off, and database connection is created
 +
 +[18:38:44] <​cescoffier>​ can you get the json body ?
 +
 +[18:39:05] <​cescoffier>​ you may have an exception somewhere
 +
 +[18:41:37] <​aslaikov>​ cescoffier, I did try already to do like this: https://​gist.github.com/​slaykovsky/​bbe650b13fe53821d6166b19290b5ceb
 +
 +[19:07:29] <​aslaikov>​ cescoffier, I believe it hangs at get methods... at getInteger() and getFloat() especially. Now I have getString() only and Integer.parseInt() and Double.parseDouble() my insert works :)
 +
 +[19:07:40] <​aslaikov>​ cescoffier, but query failing :(
 +
 +[19:42:05] <​myghty>​ hm
 +
 +[19:42:11] <​myghty>​ I never got fabric8 running :/
 +
 +[19:42:25] <​myghty>​ but never really tried, installed it, booted it, did not work, stopped it :D
 +
 +[21:05:00] <​cescoffier>​ myghty : we were speaking of the fabric8 maven plugin, not fabric8 runtime.
 +
 +[21:05:20] <​cescoffier>​ I believe ppatiern is trying to deploy on Kubernetes / Openshift
 +
 +[21:07:52] <​myghty>​ ch007m: ah :)
 +
 +[21:08:34] <​myghty>​ ch007m: sorry I meant cescoffier
 +
 +[23:14:07] <​pikajude>​ what's the best way to hook into vertx so that i can manually log http responses
 +
 +[23:31:26] <dfg> Is it possible to do something on session Timeout in vertx ? Like session.onTimeout( () -> disconnectUser(session.getParam("​userId"​)))
 +
 +[23:31:45] <dfg> to keep a list on online users