Hi Jongyoul, I strongly agree that changing requirement of JDK version is definitely breaking change. May be better to treat it to separate issue. I just think it's good food for thought, not meant to do it now. If Zeppelin project plans to have major version (1.0.0 finally), that would be a chance to do it.
2016년 10월 5일 (수) 오후 4:25, Jongyoul Lee <jongy...@gmail.com>님이 작성: > Hello Jungtaek, > > I agree that it's relatively easy to run Zeppelin with JDK 8 because > Zeppelin is not linked with another project directly. But as you told, it > bothers admin or system engineer, sometimes it's impossible for some > reasons. Thus personally, we should keep backward compatibility. > > On Wed, Oct 5, 2016 at 4:05 PM, Jungtaek Lim <kabh...@gmail.com> wrote: > > > I also think there's also many places to use old version of JDK in > > production. But unlike library projects, Zeppelin doesn't become > dependency > > of other projects, so no need to consider other projects and also users' > > own projects, which greatly lowers the barrier. > > Installing JDK/JRE 8 and using it from Zeppelin doesn't harm their > business > > logic and projects since users can maintain multiple version of JVMs > > anyway. (yes it could be bothering but possible to do... :) ) > > > > We just need to consider compatibility of existing interpreters, and user > > codes which will be run in interpreters. > > > > - Jungtaek Lim (HeartSaVioR) > > > > 2016년 10월 5일 (수) 오후 3:51, Jongyoul Lee <jongy...@gmail.com>님이 작성: > > > > > Hello, > > > > > > Concerning JDK, I mean it, too. In production level, it may be hard to > > > change it. > > > > > > On Wed, Oct 5, 2016 at 3:36 PM, DuyHai Doan <doanduy...@gmail.com> > > wrote: > > > > > > > > "Concerning #2, Zeppelin's backend has a lot of map and the map has > > > > mutable states. Thus we should also think of read-write-lock." > > > > > > > > Agree, the impl of ConcurrentHashMap deals with this by splitting the > > > > internal map into buckets and the access to each bucket is > synchronized > > > so > > > > that if you have 2 concurrent operations on the map and they fall > into > > > > different buckets it doesn't incur any lock > > > > > > > > For List, the CopyOnWriteArrayList is expensive on write because it > > > copies > > > > the content of the list for each mutation. But this impl makes the > > > > assumption that the read ratio is much higher than the write ratio. > > > > > > > > Etc ... We need to check on case by case basis which impl is the best > > > > > > > > > "Personally, moving to Java8 is very attractive but we divide it > with > > > > others because upgrading to the version of JDK influences users' > > > > experiences." > > > > > > > > Upgrading to Java 8 would require users to upgrade JDK server-side > > only, > > > > what is the impact on user experience ? > > > > > > > > On Wed, Oct 5, 2016 at 8:08 AM, Jongyoul Lee <jongy...@gmail.com> > > wrote: > > > > > > > > > Thanks for starting this thread. > > > > > > > > > > Concerning #2, Zeppelin's backend has a lot of map and the map has > > > > mutable > > > > > states. Thus we should also think of read-write-lock. > > > > > > > > > > Personally, moving to Java8 is very attractive but we divide it > with > > > > others > > > > > because upgrading to the version of JDK influences users' > > experiences. > > > > > > > > > > On Wed, Oct 5, 2016 at 11:28 AM, Anthony Corbacho < > > > > > anthonycorba...@apache.org> wrote: > > > > > > > > > > > I think about the abuse of @Inject and circular deps, it is just > > > matter > > > > > of > > > > > > education. > > > > > > > > > > > > On Tue, Oct 4, 2016 at 8:05 PM, DuyHai Doan < > doanduy...@gmail.com> > > > > > wrote: > > > > > > > > > > > > > About DI I have no strong opinion on the topic. > > > > > > > > > > > > > > I have coded frameworks with just manual DI (through > constructor > > > and > > > > > > > context objects) and it works pretty well, even for a big > > project, > > > as > > > > > > long > > > > > > > as the context objects have meaningfull names > > > > > > > > > > > > > > Using DI frameworks like Spring or Guice is also a valid > choice, > > > > > > especially > > > > > > > for a backend. The only thing to be really cautious about are > > > > circular > > > > > > > dependencies. Using @Inject is very easy and people tend to > abuse > > > it > > > > > > > everywhere and end up with horrible cyclic dependencies > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Tue, Oct 4, 2016 at 12:54 PM, Anthony Corbacho < > > > > > > > anthonycorba...@apache.org> wrote: > > > > > > > > > > > > > > > You made my day, this is the kind of email i really like !! > > > > > > > > > > > > > > > > I think its a great idea and i am willing to spend sometime > on > > > it. > > > > > > > > > > > > > > > > I also want to move to a DI (guice) architecture , let me > know > > > what > > > > > you > > > > > > > > think about it. > > > > > > > > > > > > > > > > On Tuesday, 4 October 2016, DuyHai Doan < > doanduy...@gmail.com> > > > > > wrote: > > > > > > > > > > > > > > > > > Hello devs > > > > > > > > > > > > > > > > > > The code base of Zeppelin has grown very fast in the last > 12 > > > > months > > > > > > and > > > > > > > > > it's great. It means that we have more and more > contributors. > > > > > > > > > > > > > > > > > > However, to make the project maintainable at long term, we > > need > > > > > > regular > > > > > > > > > code refactoring. > > > > > > > > > > > > > > > > > > I have some ideas to share with you > > > > > > > > > > > > > > > > > > 1) Use Java 8 to benefit from Lambda & streams. > > > > > > > > > > > > > > > > > > Now that Java 8 is well established, it is a good time to > > > > upgrade > > > > > > the > > > > > > > > > project. I believe some interpreters also need Java 8. > > > Cassandra > > > > > > > > > interpreter right now does not have unit tests for the > latest > > > > > > features > > > > > > > > > because the Embedded Cassandra server used for testing > > requires > > > > > Java > > > > > > 8. > > > > > > > > > > > > > > > > > > It would also be a good opportunity to go through the code > > > base > > > > > and > > > > > > > > > replace some boilerplate for() loop with manual filtering > by > > > the > > > > > > stream > > > > > > > > > shortcut : list.stream().filter(..).map(). It would > improve > > > > > greatly > > > > > > > > code > > > > > > > > > readability > > > > > > > > > > > > > > > > > > 2) Multi threading > > > > > > > > > > > > > > > > > > I've seen the usage of synchronize block at a few places > in > > > the > > > > > code > > > > > > > > base. > > > > > > > > > Although perfectly valid, it has a cost at runtime and > since > > > more > > > > > and > > > > > > > > more > > > > > > > > > people are asking for multi-tenancy or using a single > > Zeppelin > > > > > > instance > > > > > > > > to > > > > > > > > > server multiple users, I guess the synchronized blocks has > a > > > huge > > > > > > cost. > > > > > > > > > > > > > > > > > > There are some solid alternatives: > > > > > > > > > > > > > > > > > > - ConcurrentHashMap if we synchronized on a map > > > > > > > > > - CopyOnWriteArrayList if we synchronized on a list. > > > > > > > > > > > > > > > > > > Of cours each sychronize block should be taken carefully > not > > to > > > > > > > introduce > > > > > > > > > regression > > > > > > > > > > > > > > > > > > 3) Thread management > > > > > > > > > > > > > > > > > > I've seen some usage of new Thread() {...}.run(); it may > be a > > > > good > > > > > > time > > > > > > > > to > > > > > > > > > introduce ThreadPool and pass them along (inside context > > > objects > > > > > for > > > > > > > > > example) to have a more centralized thread management > > > > > > > > > > > > > > > > > > The advantage of having thread pool is that we can manage > > them > > > > in a > > > > > > > > single > > > > > > > > > place, monitor them and expose the info through JMX and > also > > > > > control > > > > > > > > system > > > > > > > > > resource by defining max thread number and thread pool > queue > > > > > > > > > > > > > > > > > > 4) Server monitoring > > > > > > > > > I hear many users on the field complain about the fact that > > > they > > > > > have > > > > > > > to > > > > > > > > > restart Zeppelin server regularly because it "hangs" after > > > > running > > > > > a > > > > > > > long > > > > > > > > > time. > > > > > > > > > > > > > > > > > > If we can expose some system metrics through JMX, it would > > help > > > > > > people > > > > > > > > > monitor the state of Zeppelin server and take appropriate > > > actions > > > > > > > > > > > > > > > > > > Right now we may only focus on monitoring the server > itself, > > > not > > > > > the > > > > > > > > > interpreter JVMs processes. It can be done in a 2nd step > > > > > > > > > > > > > > > > > > > > > > > > > > > What do you think about the ideas ? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > 이종열, Jongyoul Lee, 李宗烈 > > > > > http://madeng.net > > > > > > > > > > > > > > > > > > > > > -- > > > 이종열, Jongyoul Lee, 李宗烈 > > > http://madeng.net > > > > > > > > > -- > 이종열, Jongyoul Lee, 李宗烈 > http://madeng.net >