On Feb. 7, 2014, 11:26 p.m., Josh Elser wrote: > > Overall, I think it's an improvement, but there's some outstanding > > questions, like what if there are multiple monitors running... which will > > receive the logs? With the ACCUMULO_LOG_HOST, it was really up to the user > > to configure logging to point to an expected location. I never really liked > > the stuff we did to auto-populate that for them, but at least it was still > > user controllable with log configuration. Now, we're relying on > > registrations in ZK, and the expected behavior is a bit non-intuitive. If I > > start a monitor and don't realize another one is running, wouldn't it be > > unexpected to not get logs? > > > > Also, I think it might be better if this solution to get rid of the > > ACCUMULO_LOG_HOST was done by implementing a simple AccumuloMonitorAppender > > that extended SocketAppender, as that would be far more intuitive for users > > configuring log4j. > > > > (We could probably even get rid of the complex generic_logger.xml while > > we're at it. I think the main reason for the xml was for property > > interpolation after getting some information programmatically from the > > environment and populating system properties, but I'm not sure that's > > really necessary. Even if it is, I'm not sure it can't be done with the > > regular log4j.properties file, but maybe that specific piece, getting rid > > of that xml file, is another issue.) > > Josh Elser wrote: > Thanks for the thoughts. > > bq. like what if there are multiple monitors running > > Good point. I had thought there was a lock that the monitor got before > starting, but I'm incorrect. As it stands now, if multiple monitors are > running against the same instance, the one that was started last will be what > gets in zk. The concern for inadvertent copies of monitors running a single > instance is valid, but I can't say I've ever found myself in that situation > due to the start scripts. I think being able to definitively say "this is the > host:port that the SocketAppender is listening on" and outline how to use > zkCli.sh to dump that information (better yet, add it to the `accumulo info` > command or similar) is pretty straightforward, IMO. > > bq. implementing a simple AccumuloMonitorAppender that extended > SocketAppender > > It might be cleaner, but, as it stands, I don't think your average user > knows how the log-forwarding is wired up. I don't really think it changes > now. When you have one monitor (excluding the case you outlined above), they > still don't need to know anything -- it just works. Improvements to make > configuration more straightforward seems follow-on to me, as well. > > Re: properties over xml log4j configuration > > I looked into this once, I think it's primarily just how we invoke the > DomConfigurator. This is probably something we could simplify, but might be > out of the scope for these changes?
These comments made me start thinking about using and ephemeral node instead of persistent nodes in ZK. Or could possibly use zoolock and prevent multiple monitors from running. Need to decide what behavior we want. - kturner ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/17860/#review33975 ----------------------------------------------------------- On Feb. 7, 2014, 10:30 p.m., Josh Elser wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/17860/ > ----------------------------------------------------------- > > (Updated Feb. 7, 2014, 10:30 p.m.) > > > Review request for accumulo. > > > Bugs: ACCUMULO-2334 > https://issues.apache.org/jira/browse/ACCUMULO-2334 > > > Repository: accumulo > > > Description > ------- > > Removes the necessity to compute and set ACCUMULO_LOG_HOST. We can accomplish > this by having the monitor advertise a host in addition to just the port and > have the other processes place a watcher on that node in zookeeper. > > This has some nice benefits to simplifying the code, removing the annoying > (IMO) ACCUMULO_LOG_HOST variable, and, when running the monitor on a random > port, the other services can auto-discover without having to update > configuration files and restart the services. The auto-discovery also has > benefit if the monitor has to be moved to a different host (or multiple > monitors are being run with "failover") > > > Diffs > ----- > > conf/examples/1GB/native-standalone/accumulo-env.sh aa4a1d0 > conf/examples/1GB/standalone/accumulo-env.sh 1707f3d > conf/examples/2GB/native-standalone/accumulo-env.sh ef74ca7 > conf/examples/2GB/standalone/accumulo-env.sh 75014c2 > conf/examples/3GB/native-standalone/accumulo-env.sh ae0da11 > conf/examples/3GB/standalone/accumulo-env.sh 7edd938 > conf/examples/512MB/native-standalone/accumulo-env.sh 749a678 > conf/examples/512MB/standalone/accumulo-env.sh 9beb059 > core/src/main/java/org/apache/accumulo/core/Constants.java 9bb3419 > core/src/main/java/org/apache/accumulo/core/util/AddressUtil.java af9a1a6 > server/src/main/java/org/apache/accumulo/server/Accumulo.java f4da33b > server/src/main/java/org/apache/accumulo/server/monitor/LogService.java > 10ef9e4 > server/src/main/java/org/apache/accumulo/server/monitor/Monitor.java > dcb80fd > > server/src/main/java/org/apache/accumulo/server/watcher/MonitorLog4jWatcher.java > PRE-CREATION > > Diff: https://reviews.apache.org/r/17860/diff/ > > > Testing > ------- > > Local testing so far. Configure the monitor to use a random log4j port, start > an instance. Then, test log forwarding works. Restart the monitor, check that > the tserver saw the update, and that log forwarding still works even though > the monitor is now listening on a different port for log4j. > > > Thanks, > > Josh Elser > >
