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