This version (2017/05/27 13:44) is a draft.
Approvals: 0/1

[07:05:16] <cescoffier> purplefox: can you create two repositories on github: vertx-openshift-diy-quickstart and vert-openshift-cartridge ?

[10:20:23] <spriet2000> Alex, last week we were talking about a finishing a list of futures async[unknown:hellip] i found out concurency lib has something for the problem its called CompletionService

[10:20:46] <spriet2000>

[10:21:17] <spriet2000> i think its working with threads but for the idea

[10:21:41] <spriet2000>

[10:24:25] <spriet2000> oef alex isnt here :>

[10:28:45] <spriet2000> question, is there a completionservice in vertx ? using the eventloop and async?

[10:29:28] <spriet2000> or are different patterns used?

[10:30:28] <temporal_> spriet2000 what do you want to achieve ?

[10:31:39] <spriet2000> firing x async tasks and collect results.. do something when completed

[10:32:09] <spriet2000> and do other stuff with the gathered results

[10:32:57] <spriet2000> just within a verticle

[10:33:23] <temporal_> completion service will not notify you I think

[10:33:56] <temporal_> what do your tasks ?

[10:36:46] <spriet2000> parse for example form data, body data within a request.. cookie data etc..

[10:37:25] <spriet2000> you are right about completion will not notify

[10:38:13] <spriet2000> you have to remember the amount of methods you fire

[10:38:21] <spriet2000> and you collect till its empty i think

[10:39:50] <spriet2000> i am just curious about a good way to do multiple async stuff and collect results.. currently i use a list of futures

[10:40:46] <spriet2000> but its somewhat ugly.. and i think the core team have something developed for it..

[10:41:25] <spriet2000> never mind i will investigate

[10:49:58] <aesteve> spriet2000: is this the kind of stuff you're looking for ?

[10:50:11] <spriet2000> exact

[10:50:30] <spriet2000> i did exact the same :>

[10:50:34] <spriet2000> almost than

[10:50:51] <spriet2000> you are using streams cool

[10:51:25] <aesteve> that seems more natural to me, I used to work in Javascript with underscore/lodash

[10:52:06] <aesteve> (and I used to work with Groovy too, which has the same kind of features)

[10:52:26] <spriet2000> but it aint async right?

[10:52:44] <aesteve> what do you mean ? streams ?

[10:53:24] <spriet2000> will this block the main thread while collecting result?

[10:54:42] <aesteve> there's no result in my implementation, simply indications on whether the whole list has completed or not

[10:59:05] <spriet2000> thanks aesteve i will take a look further .. this is exact stuff i am talking about

[10:59:43] <aesteve> julien suggested to use rxjava, too. Might be a more elegant solution if you want to have a look

[11:00:12] <spriet2000> then you have a complete set of functionality indeed

[11:00:20] <spriet2000> i know rx from c#

[11:00:44] <spriet2000> (a bit ;)

[11:01:37] <aesteve> I think with rxjava you'll have the ability to “join” futures, the same way you can join promises in Javascript ES6

[11:08:16] <spriet2000> cool project btw very informative!

[11:08:27] <aesteve> thanks spriet2000 :)

[11:21:34] <aesteve> problem with my MultipleFutures implementation is I often find myself writing :

[11:22:27] <aesteve> first I create futures and register them into MultipleFutures then I browse a map and do something forEach future.

[11:22:40] <aesteve> there must be a better way to do this in one single step

[11:24:20] <spriet2000> nice case to investigate!

[11:28:13] <aesteve> in Groovy this would simply be “add(CurriedClosure closure)” instead of “addFuture(Future)” not sure how to mimic that in Java 8

[11:30:24] <aesteve> I'll ask the question on vertx-dev

[11:33:11] <spriet2000> they should give you good advice ..

[11:48:34] <purplefox> temporal_: cescoffier morning folks!

[11:48:53] <cescoffier> purplefox: morning !

[11:48:59] <temporal_> hi everyone

[11:49:12] <purplefox> cescoffier: how is grenoble today?

[11:50:37] <purplefox> we have just had a huge rain storm here

[11:51:16] <cescoffier> purplefox: sunny ;-) quite nice actually

[11:52:05] <purplefox> temporal_: cescoffier: ha you southern french with your nice weather, i am jealous

[11:52:17] <temporal_> very sunny today

[11:52:22] <purplefox> does grenoble count as south of france? i guess it is kind of south

[11:52:48] <purplefox> temporal_: it is _always_ sunny in marseille though? ;)

[11:52:57] <cescoffier> it's kind of, but it's not really the south

[11:52:58] <purplefox> like it always rains here

[11:53:07] <temporal_> marseille is statistically the sunniest french city

[11:54:48] <aesteve> mmh storm rain in the UK today means rainy week-end for us in Paris :(

[12:05:02] <purplefox> aesteve: :(

[12:05:09] <purplefox> aesteve: do you live in the city?

[12:05:20] <aesteve> yes

[12:05:44] <purplefox> i think vert.x is being taken over by the french ;) guillaume laforge joked about this on twitter the other day

[12:05:57] <purplefox> something about revenge for waterloo

[12:06:42] <aesteve> according to clich[unknown:eacute]s, this is good news for you, french have good taste, right ?

[12:07:11] <spriet2000> le vertx oulaala

[12:07:27] <purplefox> lol

[12:07:51] <purplefox> it will be good to have 3 hour lunch break anyway ;)

[12:08:02] <purplefox> (cue more stereotypes)

[12:08:38] <aesteve> tbh, try to eat a whole baguette with frogs on it in less than 3 hours, that's a tough one

[12:09:02] <purplefox> true, and even harder when riding a bicycle with string of onions around the neck!

[12:09:17] <aesteve> indeed

[12:19:42] <purplefox> temporal_: julien, i am getting an intermittent failure in MetricsContextTest

[12:19:58] <purplefox> Starting test: MetricsContextTest#testHttpClientWebsocketWorker

[12:19:58] <purplefox> java.lang.IllegalStateException: ChannelPipeline does not contain a HttpRequestEncoder or HttpClientCodec

[12:20:10] <temporal_> never saw that one

[12:20:13] <purplefox> and the test hangs. it doesn't happen very often though

[12:20:19] <temporal_> I suspect a worker bug again

[12:20:25] <purplefox> yeah, looks like it

[12:20:52] <temporal_> can you show a stack trace ?

[12:21:10] <temporal_> I will try to see if I can reproduce with a test

[12:21:40] <purplefox> unfortunately i didn't see a stack just this in the logs, and I can't easily reproduce it

[12:22:24] <temporal_> ok

[12:22:33] <temporal_> it's a netty log right ?

[12:23:03] <purplefox> ah actually, if you add the @Repeat annotation it is pretty easy to reproduce

[12:23:08] <purplefox> (but you need to copy:

[12:23:22] <purplefox> @Rule

[12:23:22] <purplefox> public RepeatRule repeatRule = new RepeatRule();

[12:23:37] <purplefox> into MetricsCOntextTest as it subclasses AsyncTestBase not VertxTestBase)

[12:23:56] <purplefox> i suspect the log line just logs the message not the stack

[12:25:42] <temporal_> I will investigate it

[13:32:56] <cescoffier> temporal_ purplefox - the openshift quickstart is ready to be reviewed. It's the _simple_ version using the DIY cartridge.

[13:33:01] <cescoffier>

[13:46:03] <purplefox> cescoffier: great stuff!

[13:47:38] <cescoffier> the cartridge is also ready to be reviewed:

[13:48:10] <cescoffier> the cartridge is not usable until it's merged into master - it's because openshift is clone the master branch of the repository

[13:49:15] <cescoffier> on both there is no link on the vert.x version - this is because it uses fat jars. So no need to keep them up to date. (except if we change the vert.x parameter or the format of the cluster.xml file)

[13:50:24] <purplefox> cescoffier: i think we need someone who knows openshift to review this (i.e. not me!) ;)

[13:50:57] <cescoffier> gonna ask the people from openshift directly ;-)

[13:51:13] <cescoffier> once merge the quickstart is going to be reviewed as it will be posted on the openshift web site

[13:51:36] <cescoffier> for the cartridge, to use it you just need the link of the manifest

[14:12:57] <purplefox> cescoffier: +1

[14:43:52] <temporal_> purplefox I'm not able to reproduce this bug with the MetricsContextTest, however I more or less see how it happens

[14:44:04] <temporal_> purplefox I'm trying to deduce a reproducer but that's not obvious

[14:44:06] <purplefox> have you tried the @Repeat ?

[14:44:11] <temporal_> 30,000

[14:44:16] <temporal_> on osx

[14:44:18] <temporal_> in a linux vm

[14:44:27] <purplefox> how many cores on the vm?

[14:44:36] <temporal_> I don't know :-)

[14:44:45] <purplefox> default is usually low so bad for race conditions

[14:44:49] <purplefox> have you tried on osx?

[14:44:51] <temporal_> good advice

[14:44:57] <temporal_> yes on osx too

[14:44:59] <temporal_> does not happen

[14:45:17] <temporal_> it's quite tiny window I suspect

[14:46:09] <purplefox> which test are you testing again?

[14:46:23] <temporal_> testHttpClientWebsocketWorker

[14:46:36] <purplefox> weird, it fails pretty quickly for me:

[14:46:56] <temporal_> I whish it would

[14:47:06] <temporal_> I can provide a branch with some changes

[14:47:13] <temporal_> and you can test it to see if it fixes it

[14:47:21] <temporal_> (does not mean I will not have a proper test for it)

[14:47:21] <purplefox> * Iteration 1/1000 of test [14:47:23] <purplefox> Starting test: MetricsContextTest#testHttpClientWebsocketWorker [14:47:25] <purplefox> log4j:WARN No appenders could be found for logger (io.netty.util.internal.logging.InternalLoggerFactory). [14:47:27] <purplefox> log4j:WARN Please initialize the log4j system properly. [14:47:29] <purplefox> log4j:WARN See for more info. [14:47:31] <purplefox> * Iteration 2/1000 of test

[14:47:33] <purplefox> Starting test: MetricsContextTest#testHttpClientWebsocketWorker

[14:47:37] <purplefox> Starting test: MetricsContextTest#testHttpClientWebsocketWorker

[14:47:39] <purplefox> * Iteration 3/1000 of test [14:47:40] <temporal_> I believe you :-) [14:47:41] <purplefox> * Iteration 4/1000 of test

[14:47:43] <purplefox> Starting test: MetricsContextTest#testHttpClientWebsocketWorker

[14:47:45] <purplefox> * Iteration 5/1000 of test [14:47:47] <purplefox> Starting test: MetricsContextTest#testHttpClientWebsocketWorker [14:47:49] <purplefox> Starting test: MetricsContextTest#testHttpClientWebsocketWorker [14:47:51] <purplefox> * Iteration 6/1000 of test

[14:47:53] <purplefox> java.lang.IllegalStateException: ChannelPipeline does not contain a HttpRequestEncoder or HttpClientCodec

[14:47:55] <purplefox> silly question: are you uptodate with master?

[14:47:57] <purplefox> ok sure

[14:48:02] <temporal_> I will update with master

[14:48:21] <temporal_> I'm up to date

[14:48:54] <purplefox> anyone good news i, after the last week or more we have now cleared almost all outstanding bugs on core and other projects :)

[14:49:05] <purplefox> i lose count how many now

[15:02:44] <purplefox> temporal_: can you send me a link to your fixes?

[15:02:58] <temporal_> I haven't yet written it

[15:03:11] <temporal_> I can try to make a gross one

[15:03:14] <temporal_> quickly

[15:03:21] <temporal_> just to see

[15:04:00] <temporal_> I'm goint to do that

[15:08:18] <temporal_> it's actually a logical fix with respect to other fixes

[15:08:41] <temporal_> (i.e the same kind)

[15:08:49] <cescoffier> temporal_or purplefox can you give my the commit right on vertx-examples ?

[15:10:54] <temporal_> cescoffier will do now

[15:10:59] <temporal_> purplefox try that please :

[15:11:01] <cescoffier> thanks temporal_

[15:11:36] <temporal_> cescoffier check

[15:12:29] <cescoffier> temporal_ works thanks !

[15:13:12] <cescoffier> what's the review policy for examples ? I've added an example of verticle reading the configuration in the maven-verticle module

[15:13:35] <temporal_> cescoffier at the moment we fully trust you :-)

[15:13:49] <cescoffier> ok ;-) But don't trust my markdown skills….

[15:14:40] <cescoffier> ah ah ah… it's asciidoc, not markdown

[15:24:11] <purplefox> cescoffier: temporal_ guys - one thing that we need to do for the 3.0 release is complete the Eclipse release process as its a major release

[15:24:43] <cescoffier> any document about that ? (only know the Apache process)

[15:24:47] <purplefox> this is basically a matter of filling in a few forms, ticking some boxes and sending some emails to various people

[15:25:23] <purplefox> I did this last time, so it's down to one of you to have the pleasure of it this time ;)

[15:25:45] <purplefox> I suggest Julien as he is more familiar with the project, but you can fight amongst yourselves to decide who ;)

[15:26:16] <temporal_> when should that happen ?

[15:26:21] <cescoffier> well… I don't want to steal this pleasant activity to Julien

[15:26:23] <purplefox> I've also suggested that we get someone who knows the process to mentor the person

[15:26:25] <temporal_> keep in mind I'm travelling the week of the release :-)

[15:26:34] <purplefox> travelling?

[15:26:38] <temporal_> meeting

[15:26:48] <purplefox> ah sereca

[15:26:50] <purplefox> ok

[15:27:12] <purplefox> well you just need an internet connection so i guess it should be ok

[15:27:30] <temporal_> I'll do my best :-)

[15:27:37] <temporal_> I'll start to study that soon

[15:27:41] <temporal_> and prepare it in advance

[15:30:03] <purplefox> ok thanks julien, i'll put you in touch with max who can help you out with any questions

[15:32:54] <temporal_> purplefox have you checked the fix on the branch ?

[15:33:21] <purplefox> not tried it yet, will now :)

[15:33:26] <temporal_> ok

[15:33:39] <temporal_> I have an idea for a reproducer

[15:33:44] <temporal_> not sure it will work out

[15:40:26] <purplefox> temporal_: the fix doesn't help

[15:40:34] <temporal_> ok

[15:40:55] <purplefox> temporal_:i suggest if it's not easy to fix that we don't spend too much time on it now, probably other more important stuff to do :)

[15:41:23] <temporal_> purplefox yep

[15:41:56] <purplefox> are you handing the mongo client date issue?

[15:42:06] <temporal_> purplefox not yet

[15:42:11] <temporal_> purplefox can you take care of it ?

[15:42:24] <purplefox> ok, if you look at the groovy json issue :)

[15:42:31] <temporal_> no problem

[15:42:41] <temporal_> I thought that JsonObject.getMap was fully unwrapping things

[15:43:59] <purplefox> yeah i don't get it, jsonobject does not contain nested jsonobjects anyway, it contains maps

[15:43:59] <temporal_> (I think this is what it is about)

[15:45:17] <purplefox> ah bollocks. i just remembered… i can't do the milestone release on monday as i am in meetings in newcastle (monday and tuesday) :(

[15:47:42] <purplefox> for some reason in the next few weeks everyone has thought it a good idea to book all the meetings :( [newcastle,customers, sereca,msa]

[15:48:32] <purplefox> it's actually really getting on my tits

[15:49:54] <rajith> purplefox: I was hoping you would be free next week so I can heap more misery on you by asking you to review the amqp support work

[15:50:06] <purplefox> ha you're kidding right?

[15:50:11] <rajith> purplefox: but I will be at a customer site too .. so will make it a point to bug u the week after

[15:50:44] <rajith> purplefox: well u said tits and that got my attention :p

[15:50:51] <purplefox> right now everyone is telling me their stuff is the most important and it gets priority ;)

[15:51:01] <temporal_> purplefox did I ?

[15:51:09] <purplefox> no, not you

[15:51:17] <purplefox> or rajith actually

[15:51:27] <rajith> purplefox: hahahah

[15:51:33] <purplefox> I'm mainly pissed about others who will remain nameless on this public channel ;)

[15:53:04] <rajith> purplefox: lol

[15:54:18] <rajith> purplefox: I understand that u and julien are overwhelmed by the core work. So no hurry .. but I'll bug u here and there occasionally to get your attention

[15:55:20] <purplefox> so end result is, if we want to get everything done that means we have to work all night and all weekend. but guess what? we're already doing that. so unless we can break the laws of physics. bangs head on desk ;)

[15:56:53] <rajith> purplefox: yea Julien told me how tough the situ is … I've communicated that to ted and david when they asked about vertx-amqp work. I'm sure people understand

[15:57:03] <rajith> purplefox: unless they find a way to clone u guys

[15:57:44] <rajith> purplefox: btw do we have customers using vertx? an SA guy from toronto asked about vert.x during a casual conversation

[15:59:11] <purplefox> rajith: *lots* of people use Vert.x, we have some names already up on the vert.x 3 website (scroll down) and a load more who arene't up there. some very big names, i'll tell you some more privately

[15:59:12] <temporal_> rajith check bottom of the page for customers

[15:59:22] <temporal_> I mean public customers

[16:00:57] <aesteve> big names on the vertx-3 website would help spread the word. People tend to follow trending technologies these days

[16:01:04] <aesteve> (there already are)

[16:01:47] <rajith> temporal_: purplefox awesome!

[16:01:50] <purplefox> rajith: i sent you a private email too

[16:02:24] <rajith> purplefox: I already did some selling to the SA guy.

[16:02:39] <rajith> purplefox: thx for the email

[16:03:45] <purplefox> inside Red Hat we don't have much exposure I guess because there is no product. but in terms of mindshare I'd say Vert.x is probably one of the most popular projects that Red Hat invests in.

[16:04:08] <purplefox> we have more stars on github than any jboss project (almost 3 times as many as app server for example)

[16:05:53] <rajith> purplefox: yea the SA guy wanted to know about when we are going to productize it .. I said he should speak Mark L/you

[16:07:32] <temporal_> purplefox JsonObject stores nested JsonObject either as Map or JsonObject, should we make this consistent or have groovy do its own map conversion ?

[16:12:28] <purplefox> i think it is done this way to prevent too much copying

[16:13:34] <purplefox> could you create a map subclass that converts when required?

[16:16:03] <purplefox> basically override the get method and check if jsonobject and convert

[16:17:22] <temporal_> ok

[16:20:01] <purplefox> i dunno, just a suggestion, i'm sure you will work something ouy

[16:20:28] <purplefox> so just remembering…

[16:20:50] <purplefox> i think we allow nested maps as that is more efficient, e.g. when getting a query from mongodb we don't have to do much conversion

[16:21:17] <purplefox> and we allow nested jsonobject as that's more efficient for user created nested jsonobjects

[16:22:41] <purplefox> maybe we could be consistent in jsonobject and only store nested maps

[16:22:58] <purplefox> i'm not sure it would be a big overhead to crete the jsonobject wrapper in the get method…

[16:24:57] <temporal_> basically when getMap() is invoked

[16:25:09] <temporal_> nested json is either a Map or a JsonObject

[16:25:28] <temporal_> so yes either we store eerything as a Map

[16:25:35] <temporal_> (and we can call getMap on JsonObject on a put)

[16:25:43] <temporal_> since the map already exists

[16:25:57] <purplefox> yeah i meant call getMap on JsonObject on put

[16:26:04] <temporal_> I'm going to do that then

[16:26:26] <purplefox> but first… can you do a quick microbenchmark or something to see performance overhead?

[16:26:52] <purplefox> because the get will require creation of an object wrapper

[16:27:09] <temporal_> I mean store as Map

[16:27:20] <purplefox> yess

[16:27:27] <temporal_> if user do a put on JsonObject, the underlyhing Map already exists in the JsonObject iself

[16:27:31] <purplefox> yes

[16:27:36] <purplefox> but when they call get

[16:27:44] <purplefox> it will need to create a jsonobject wrapper around the map

[16:27:49] <purplefox> which it currently doesn't need to

[16:27:49] <temporal_> ah yes it recreates a JsonObject on each call

[16:27:58] <purplefox> so that's the overhead

[16:27:58] <Sticky> ooi are you trying to address the same issue we had in the 2.0 mongo persistor of supporting mongo specific json types?

[16:28:09] <temporal_> perhaps we can use a Map subclass that caches the JsonObject :-)

[16:28:51] <temporal_> Sticky we do have JsonObject in V3 that stores nested json as Map or JsonObject

[16:29:02] <temporal_> in groovy we just call getMap to get a Map

[16:29:10] <temporal_> and user expects nested Map

[16:29:14] <purplefox> yeah that was the other suggestion (above)

[16:29:24] <purplefox> but it's more work as you'd have to subclass several methods

[16:29:30] <purplefox> e.g. the iterators, and values() etc

[16:30:08] <temporal_> it would be only for caching the JsonObject in JsonObject.getMap or getValue

[16:30:36] <temporal_> i.e optimize that

[16:30:37] <temporal_> if (val instanceof Map) {

[16:30:37] <temporal_> val = new JsonObject1);

[23:20:29] <purplefox_> it must just be simpler to convert to a jsonobject on get always

[23:20:37] <purplefox_> i'm not sure the overhead would be too bad

[23:21:04] <temporal_> indeed it does

[23:21:04] <temporal_> public void renderJsonObjectToString(ExpressionModel expression, CodeWriter writer) {

[23:21:04] <temporal_> expression.render(writer);

[23:21:05] <temporal_> writer.append(“.toString()”);

[23:21:05] <temporal_> }

[23:21:25] <temporal_> it's code translator

[23:22:22] <temporal_> it's how encodePrettily is translated in groovy

[23:23:37] <temporal_> I should use this I thnk

[23:23:37] <temporal_>

[23:24:07] <purplefox_> why not just keep things simple, forget the JsonMap and always store internally as a map, and extract the map from the jsonobject on put?

[23:24:45] <temporal_> it's not about what we changed in this case

[23:25:18] <temporal_> purplefox_ as you want

[23:25:31] <temporal_> either case, this current bug in codetranslator will happen :-)

[23:25:38] <purplefox_> just a suggestion

[23:25:40] <temporal_> I'm not against getting it simpler

[23:25:45] <temporal_> if that does not hurt performance

[23:25:46] <temporal_> anyway

[23:25:49] <purplefox_> you do what you think is right :)

[23:26:01] <temporal_> recursively it will unwrap to map

[23:26:05] <purplefox_> tbh i would doubt the perf diff is great

[23:26:06] <temporal_> I mean first level is json

[23:26:17] <temporal_> when we decode

[23:26:31] <temporal_> but nested json are map or lists

[23:26:38] <temporal_> when deserialized by jackson

[23:46:44] <temporal_> when you type “cd java” in your browser address bar, it means it's time to go to bed

Map)val); [16:30:37] <temporal_> } [16:30:55] <temporal_> if (val instanceof OurMap) { val = ((OurMap) val).json; [16:31:43] <Sticky> ok, yeah, totally different issue [16:32:32] <purplefox> you can't control the specific map class used [16:32:40] <purplefox> as this can be specified by the user [16:33:11] <purplefox> * Create an instance from a Map. The Map is not copied. [16:33:11] <purplefox> * [16:33:11] <purplefox> * @param map the map to create the instance from. [16:33:11] <purplefox> */ [16:33:12] <purplefox> public JsonObject(Map<String, Object> map) { [16:33:16] <purplefox> = map; [16:33:18] <purplefox> } [16:33:35] <temporal_> yes we would only use this for JsonObject [16:33:35] <purplefox> brb [16:33:45] <temporal_> and if it's not this instance then we wrap it like it is now [16:33:52] <purplefox> i'm not sure i follow [16:33:55] <purplefox> be back in 10 mins [16:33:58] <temporal_> ok [16:33:59] <temporal_> :-) [16:41:06] <purplefox> temporal_: back now [16:41:57] <temporal_> ok [16:42:18] <temporal_> I meant to [16:42:21] <temporal_> have this [16:42:21] <temporal_> if (val instanceof JsonMap) { [16:42:22] <temporal_> val = ((JsonMap) val).owner; [16:42:22] <temporal_> } else if (val instanceof Map) { [16:42:22] <temporal_> val = new JsonObject((Map)val); [16:42:22] <temporal_> } else if (val instanceof List) { [16:42:22] <temporal_> val = new JsonArray((List)val); [16:42:23] <temporal_> } [16:42:41] <temporal_> and JsonObject creates a JsonMap instead of LinkedHashMap [16:42:58] <purplefox> ^is this the get() method? [16:43:23] <temporal_> getValue() [16:43:28] <temporal_> get is similar [16:45:10] <purplefox> i still don't follow [16:45:21] <purplefox> can you explain more about json map, how it gets there etc? [16:45:53] <temporal_> [16:46:05] <temporal_> [16:46:44] <temporal_> or I can simply handle this in Groovy when converting maps :-) [16:49:56] <purplefox> sounds reasonable [16:50:03] <purplefox> i would always microbenchmark though [16:50:47] <temporal_> do we have existing microbenchmarks ? [16:51:06] <temporal_> or should I try to make one with JMH ? [16:51:25] <purplefox> i usually just write my own, just a few lines of code [16:51:44] <temporal_> good old System.nano time ? [16:52:20] <aesteve> temporal_: you're gonna use JsonSlurper ? [16:52:50] <temporal_> aesteve now we are only changing this in vertx core to use always Map for consistency [16:53:04] <purplefox> e.g. [16:53:16] <purplefox> now the trick is to make sure whatever you're doing is not optimised away [16:53:25] <purplefox> so you must use the result, e.g. [16:54:13] <temporal_> yes I see [16:54:33] <temporal_> the famous black holes [16:55:18] <purplefox> e.g. [16:55:46] <purplefox> i almost always do this before implementing an optimisation, because often you find out the optimisatio is pretty pointless [16:56:36] <purplefox> and the other main pitfalls: [16:56:49] <purplefox> 1. make sure you average of many, many iterations [16:56:57] <purplefox> 2. let the JIT warmup [16:57:10] <purplefox> (that's why i just run the same thing in a while (true) [16:57:25] <temporal_> ok [16:57:48] <purplefox> actually 100000 is not enough in the above example [16:57:51] <purplefox> more like 100000000 [16:58:07] <purplefox> because also you need to take GC into account [16:58:17] <purplefox> and if you do too little or not long enough GC doesn't occur at all probably [16:58:46] <purplefox> or yeah you could use jmh [16:58:52] <purplefox> but i find it too much bother [17:00:04] <temporal_> I'm giving jmh a try, it becomes more or less the good way to do [17:00:29] <temporal_> so we can keep the benchmark [17:00:31] <temporal_> and reuse it later [17:02:16] <purplefox> yeah jmh means you don't have to worry about doing stupid things, but i also thing it's good practice for devs to understand what those stupid things are [17:38:52] <purplefox> temporal_: you are on holiday monday right? [17:44:22] <temporal_> purplefox yes the afternoon [17:44:39] <temporal_> my daughter is singing at a chorale [17:44:49] <temporal_> and I can't afford to skip it :-) [17:44:51] <purplefox> so basically i'm not available for the milestone on monday or tuesday [17:44:56] <purplefox> no, that's fair enough :) [17:45:29] <purplefox> how long does the release take? [17:45:59] <temporal_> purplefox the release itwelf is quite quick [17:46:09] <temporal_> what takes time is checking everything [17:46:14] <temporal_> because it's manual [17:46:20] <purplefox> what kind of checking? [17:46:32] <temporal_> until now I check the examples [17:46:36] <temporal_> all the examples [17:46:37] <temporal_> in java [17:46:39] <temporal_> ruby [17:46:40] <temporal_> js [17:46:41] <temporal_> etc… [17:46:51] <purplefox> ok [17:47:01] <temporal_> now also the reactive dashboard [17:47:12] <temporal_> just to be sure I'm not releasing something that does not work :-) [17:48:49] <purplefox> ok, maybe i can do something on sunday [17:48:57] <purplefox> i really don't want it to slip too long [17:53:13] <aesteve> maybe it would be worth considering using the examples as integration tests ? [17:53:55] <aesteve> (not for the final release obviously since it's gonna be a huge amount of work, but it could save some time in future releases) [17:58:58] <temporal_> aesteve it's about getting things automated indeed [17:59:20] <temporal_> aesteve I think it's about confidence :-) [17:59:56] <temporal_> aesteve testing examples also allows to find some issues, I remember I found some with these [18:00:02] <temporal_> specially in the early milestones [18:00:39] <temporal_> purplefox I posted an issue about mysql async on vertx-dev, about timestamp, if you know the answer that would be useful for me [18:02:01] <purplefox> temporal_: when? [18:02:07] <purplefox> i don't see anything [18:02:07] <temporal_> 2 days ago [18:02:14] <aesteve> ok temporal_ it's good if it's automated indeed. Let me know if you need some help with “browser testing”. I've been using Geb for a while [18:02:44] <temporal_>!topic/vertx-dev/1WPJpvtzzzw [18:03:04] <temporal_> I'm trying to get all tests running on my machine for the vertx-aggregator project that does the release [18:03:16] <purplefox> where does it get the timestamp value from? [18:03:29] <temporal_> it tries to insert the timestamp value in mysql [18:03:32] <temporal_> and fails [18:03:40] <temporal_> it's scala code [18:03:41] <purplefox> but where does it come from? [18:03:48] <temporal_> it's hardcoded in unit test [18:03:57] <temporal_> I suspect a mysql configuration [18:04:01] <temporal_> on my machine [18:04:03] <purplefox> do you have a link to the test? [18:04:13] <temporal_> it's the mysql tests [18:04:17] <temporal_> the unit tests [18:04:38] <temporal_> Narigo ping :-) [18:04:46] <Narigo> temporal_, pong [18:04:56] <temporal_> you are doing the mysql async driver right ? [18:05:30] <purplefox> yeah Narigo is the man [18:05:56] <temporal_> did you see my message on!topic/vertx-dev/1WPJpvtzzzw ? [18:06:04] <purplefox> joern has promised to rewrite it in Java before Monday so we can actually support it without bugging him each time ;) [18:06:06] <temporal_> I'm trying to get the tests running locally for me [18:16:53] <Narigo> let me check.. sorry, had to quickly get rid of one todo from my long list :S [18:18:53] <Narigo> wasn't that trailing Z for utc or something? :D [18:19:09] <temporal_> I don't know [18:19:14] <temporal_> there are two things [18:19:20] <temporal_> 1/ I don't see it in documentation [18:19:36] <temporal_> 2/ I'm not able to insert such timestamp in my mysql installation : why ? [18:21:28] <Narigo> temporal_, let me start the tests myself again… there were a lot of changes with tims change from service to client… [18:21:35] <temporal_> ok [18:36:29] <Narigo> temporal_, I get failing tests here, too. Got to investigate I guess :( [18:37:23] <temporal_> ok [18:37:29] <temporal_> same failure ? [18:37:54] <Narigo> nope, something else. I guess some more basic setup :) [19:06:56] <Narigo> temporal_, the funny thing is: I only get errors on postgresql [19:07:26] <Narigo> at least, it tells me here… [19:08:09] <jtruelove> so kafka is getting official support in vertx 3.1? [19:10:02] <Narigo> temporal_, but as I see in the MySQLConfig.scala in the tests, the date / timestamps get overwritten: [19:10:03] <Narigo> override val dateTimeInUtc1 = “2015-02-22T07:15:01.000” [19:10:03] <Narigo> override val dateTimeInUtc2 = “2014-06-27T17:50:02.000” [19:10:15] <Narigo> so there is no Z…? [19:13:47] <Narigo> Ah no, wait. Ok, it adds it with Z for UTC, and +02:00 for a local time [19:17:28] <Narigo> temporal_, I guess this is somewhat standard for writing timestamps? I'm trying to find if something like this is mentioned in the common sql interface, but I can't really find the links :S [19:17:41] <Narigo> Seems like the links in the docs are broken… [19:29:28] <temporal_> Narigo ok [19:29:35] <temporal_> Narigo but my mysql complains about this Z [19:29:47] <Narigo> temporal_, which version do you use? [19:30:00] <temporal_> mysql Ver 14.14 Distrib 5.6.23, for osx10.9 (x86_64) using EditLine wrapper [19:30:51] <Narigo> temporal_, mine is 5.5.38 … [19:40:31] <temporal_> is this Z important in these tests ? [19:43:11] <Narigo> temporal_, well, you maybe could try to just have +00:00 instead? [19:44:23] <temporal_> the current tests insert “2015-02-22T07:15:01.234Z” [19:44:31] <temporal_> what would we insert instead ? [19:45:16] <Narigo> if it works without Z for you, it may work elsewhere, too. but i can't really check right now thanks to this setup issue… it tells me postgres fails and mysql doesn't - but from the exceptions in the logs it looks like both have problems.. [19:45:33] <Narigo> i'd try “2015-02-22T07:15:01.234+00:00” first [19:48:24] <Narigo> temporal_, maybe this helps, too? [19:59:08] <temporal_> I will read your suggestion and see later :-) [19:59:46] <Narigo> temporal_, after updating my mysql, i get the same exception - i guess it's just the setting then [20:03:33] <temporal_> if you can figure out the correct change it would make my day :-) [20:25:53] <Narigo> temporal_, it looks like mysql generally doesn't really support time zones, so it wants no information about that at all. you can either make mysql change to allow these other date values by following the steps in the url i sent before - or we change the test to not test time zones [20:26:21] <Narigo> it looks like mysql 5.6 introduced these problems [20:34:39] <Narigo> temporal_, got to go now - maybe i can manage to get it to run over the weekend and change the tests then… (changing from 2015-02-22T07:15:01.234Z to 2015-02-22 07:15:01 should help for mysql i guess… [22:10:24] <purplefox_> temporal_: are you there julien? [22:10:33] <temporal_> purplefox_ yes [22:11:01] <purplefox_> temporal_: i'm just trying to setup the keys and stuff for pushing to releases to sonatype [22:11:20] <temporal_> ok [22:11:24] <purplefox_> but i can't remember how to do it. something to do with settings.xml? [22:11:28] <temporal_> yes [22:11:30] <temporal_> hum [22:11:31] <temporal_> not sure though [22:11:42] <temporal_> pushing to sonatype != keys for signing [22:11:52] <temporal_> they check it is signed [22:11:57] <temporal_> but they don't really care who signed it [22:12:18] <temporal_> as long as the public key is available in the repo [22:12:42] <temporal_> for pushing in sonatype it's another kind of config [22:12:45] <temporal_> in settings.xml [22:14:42] <temporal_> key is for PGP plugin [22:14:46] <temporal_> defined in sonatype oss parent [22:14:58] <temporal_> it's used as soon as you release [22:15:08] <temporal_> with the sonatype oss profile [22:15:36] <purplefox_> i have a sonatype profile already in settings.xml but no keys [22:15:51] <purplefox_> <profile> [22:15:51] <purplefox_> <id>sonatypeoss</id> [22:15:51] <purplefox_> <repositories> [22:15:51] <purplefox_> <repository> [22:15:52] <purplefox_> <id>sonatype-oss-snapshots</id> [22:15:52] <purplefox_> <name>Sonatype OSS Snapshots</name> [22:15:54] <purplefox_> <url></url> [22:15:56] <purplefox_> </repository> [22:15:58] <purplefox_> </repositories> [22:16:00] <purplefox_> </profile> [22:16:18] <temporal_> keys are stored in your PGP config [22:16:40] <purplefox_> do i have to use keys or can i use username/password? [22:16:47] <purplefox_> tbh i have no idea what key to use [22:16:56] <temporal_> for signing you need a private key [22:17:00] <temporal_> any key you like :-) [22:17:08] <temporal_> as long as you upload it to the right place [22:17:09] <purplefox_> yeah for signing, but what about for upload? [22:17:13] <temporal_> ah [22:17:17] <temporal_> let me check my settings [22:17:29] <purplefox_> maybe i just need username/pwd? [22:17:39] <temporal_> basically I do have [22:17:39] <temporal_> <server> [22:17:40] <temporal_> <id>sonatype-nexus-snapshots</id> [22:17:40] <temporal_> <username>vietj</username> [22:17:43] <temporal_> in my settings.xml [22:17:43] <purplefox_> i did have this all setup, but i changed machines and lost all the config [22:17:53] <temporal_> for snapshot and staging [22:18:10] <purplefox_> and <password>julienspassword</password> ? [22:18:24] <purplefox_> or is this input every time [22:19:58] <purplefox_> what's the url for the sonatype nexus web interface? [22:20:04] <temporal_> there is a passowrd [22:20:12] <temporal_> I think [22:20:34] <temporal_> that's it [22:21:37] <temporal_> this guide is very good : [22:24:54] <purplefox_> i understand the principles and the workflow as i used to do all the releases. it's just the security setup i can't remember [22:25:06] <purplefox_> i added username and password as above [22:25:23] <purplefox_> but i get: [22:25:25] <purplefox_> [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy (default-deploy) on project vertx-core: Failed to deploy artifacts: Could not transfer artifact io.vertx:vertx-core:jar:3.0.0-20150529.202357-3349 from/to sonatype-nexus-snapshots ( Failed to transfer file: [22:26:41] <temporal_> it password [22:26:47] <temporal_> you do not store your real password [22:26:51] <temporal_> it is stored in another file [22:26:59] <temporal_> settings-security.xml [22:27:02] <temporal_> have you done that ? [22:28:36] <purplefox_> i am looking at this: [22:28:55] <purplefox_> which says: [22:28:55] <purplefox_> <settings> [22:28:56] <purplefox_> <servers> [22:28:56] <purplefox_> <server> [22:28:56] <purplefox_> <id>ossrh</id> [22:28:56] <purplefox_> <username>your-jira-id</username> [22:28:58] <purplefox_> <password>your-jira-pwd</password> [22:29:00] <purplefox_> </server> [22:29:02] <purplefox_> </servers> [22:29:04] <purplefox_> </settings> [22:29:06] <purplefox_> in settings.xml with my real password [22:29:31] <purplefox_> and i have used same username/password as i can successfully use to login on the web interface [22:29:34] <purplefox_> but it doesn't work [22:31:14] <purplefox_> fuck this security lark. why can't people just be nice and trustworthy then we wouldn't need any of this ;) [22:36:57] <purplefox_> temporal_: can you just send me your settings.xml so i can copy it (obviously remove your password ;) ) ? [22:37:33] <temporal_> ok [22:37:39] <temporal_> my password is stored in another file anyway [22:37:58] <temporal_> in settings.xml you should not your real password I think [22:38:07] <temporal_> it should be a generated password [22:38:16] <temporal_> and the real one is stored in settings-security.xml [22:38:27] <temporal_> (that's why I can send you my settings.xml and it won't matter) [22:39:08] <purplefox_> ok, but that's not what it says in the docs (see above) ;) [22:39:16] <purplefox_> it says “your-jira-pwd” [22:39:23] <temporal_> ah ok [22:39:24] <temporal_> maybe [22:39:31] <temporal_> actually this must be true [22:39:36] <temporal_> since there is no {} [22:39:54] <temporal_> it was for jboss release repo [22:41:22] <temporal_> sent [22:46:40] <purplefox_> temporal_: wow your settings.xml is complex [22:46:55] <temporal_> I think it has leftovers from my prvious portal life :-) [22:47:01] <purplefox_> and doesn't correspond to the docs at all [22:47:08] <purplefox_> i am lost [22:48:52] <purplefox_> temporal_: if i make sure everything is working and examples work ok over the weekend, would it be possible if you did the actual push on monday morning? [22:49:08] <temporal_> sure [22:49:16] <purplefox_> or maybe we can do it on sunday if you are available [22:49:29] <temporal_> let me know when everything is fine [22:49:39] <temporal_> and then I'll do it between sunday and monday noon [22:49:53] <purplefox_> ok cool. i'll prepare it and ping you when we're ok :) [22:50:05] <purplefox_> thanks julien [22:50:39] <purplefox_> ok time for some wine now :) [22:55:12] <temporal_> ok [22:55:24] <temporal_> I have a pending PR for dropwizard config [22:55:34] <temporal_> that I will probably accept before monday [23:11:52] <purplefox_> temporal_: we have some failures on CI due to recent JsonObject changes [23:11:59] <temporal_> ok [23:12:08] <temporal_> in vertx core itself ? [23:12:31] <purplefox_> e.g. [23:13:00] <temporal_> I'm on it [23:13:56] <rajith1> temporal_: purplefox_ aren't u guys sleeping? :) [23:14:01] <temporal_> I hsould [23:14:09] <temporal_> tomorrow I'm involved in a yard sale [23:14:15] <temporal_> need to get up early [23:15:01] <spriet2000> :> [23:15:04] <temporal_> I will fix that and then go to bed [23:15:16] <purplefox_> rajith1: sleep? what is this? [23:15:28] <rajith1> purplefox_: lol [23:15:42] <temporal_> I think I'll sleep for one month in august :-) [23:15:55] <rajith1> purplefox_: I assume either caffeine, alcohol or both are running through your veins atm [23:17:53] <purplefox_> you forgot the crack cocaine! [23:19:17] <rajith1> purplefox_: I'll certainly need some when I visit the customer … turns out not next week, but the week after. [23:19:24] <temporal_> so codetrans encodePrettlily does this [23:19:25] <temporal_> o = [bar:juu] [23:19:25] <temporal_> o = {“bar”:“juu”} [23:19:25] <temporal_> o = {“bar”:“juu”} [23:19:30] <temporal_> for groovy , json, ruby [23:19:39] <temporal_> I think the currrent groovy conversion [23:19:44] <temporal_> relies on JsonObject in the tests [23:19:55] <temporal_> or just uses toString [23:20:00] <temporal_> and before it was a JsonObject [23:20:02] <temporal_> and now it is a Map [23:20:08] <temporal_> in the code generator [23:20:13] <temporal_> so it fails to parse it [23:20:14] <temporal_> later [23:20:21] <temporal_> in Assert.assertEquals(expected, new JsonObject((String) o