diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2019-03-19 16:20:12 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2019-03-19 16:31:04 +0100 |
commit | ecbe2d4b1b84a9c5db3a3bc34eeeca34e0800499 (patch) | |
tree | 36a2c908c7ca70ecd83f93f596a045ac18d132d8 /logserver | |
parent | b4cd90dcdc1ef5c4ccb0b138a3727749c9d647f5 (diff) |
Stop sending default state to logd
Configuration of default state through system property is not
documented, and the configuration is ignored by logd.
Diffstat (limited to 'logserver')
8 files changed, 18 insertions, 346 deletions
diff --git a/logserver/src/main/java/com/yahoo/logserver/Server.java b/logserver/src/main/java/com/yahoo/logserver/Server.java index d0df5bf2972..db01444ca67 100644 --- a/logserver/src/main/java/com/yahoo/logserver/Server.java +++ b/logserver/src/main/java/com/yahoo/logserver/Server.java @@ -9,7 +9,6 @@ import com.yahoo.log.event.Event; import com.yahoo.logserver.handlers.HandlerThread; import com.yahoo.logserver.handlers.LogHandler; import com.yahoo.logserver.net.LogConnectionFactory; -import com.yahoo.logserver.net.control.Levels; import com.yahoo.yolean.system.CatchSignals; import java.io.IOException; @@ -179,7 +178,6 @@ public class Server implements Runnable { System.out.println("System properties:"); System.out.println(" - " + APPNAME + ".listenport (" + LISTEN_PORT + ")"); System.out.println(" - " + APPNAME + ".queue.size (" + HandlerThread.DEFAULT_QUEUESIZE + ")"); - System.out.println(" - logserver.default.loglevels (" + (new Levels()).toString() + ")"); System.out.println(); } diff --git a/logserver/src/main/java/com/yahoo/logserver/net/LogConnection.java b/logserver/src/main/java/com/yahoo/logserver/net/LogConnection.java index 7e1ae5c60ae..1a9221b82a7 100644 --- a/logserver/src/main/java/com/yahoo/logserver/net/LogConnection.java +++ b/logserver/src/main/java/com/yahoo/logserver/net/LogConnection.java @@ -1,28 +1,23 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.logserver.net; -import com.yahoo.log.LogLevel; -import com.yahoo.logserver.LogDispatcher; -import com.yahoo.log.LogMessage; -import com.yahoo.log.InvalidLogFormatException; - import com.yahoo.io.Connection; import com.yahoo.io.Listener; import com.yahoo.io.ReadLine; - -import com.yahoo.logserver.net.control.Levels; +import com.yahoo.log.InvalidLogFormatException; +import com.yahoo.log.LogLevel; +import com.yahoo.log.LogMessage; +import com.yahoo.logserver.LogDispatcher; import java.io.IOException; -import java.util.logging.Logger; -import java.util.logging.Level; -import java.util.LinkedList; -import java.util.Set; -import java.util.HashSet; - -import java.nio.charset.Charset; import java.nio.ByteBuffer; -import java.nio.channels.SocketChannel; import java.nio.channels.SelectionKey; +import java.nio.channels.SocketChannel; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; /** * TODO @@ -39,8 +34,6 @@ public class LogConnection implements Connection { public static final int READBUFFER_SIZE = (32 * 1024); - static private final Charset charset = Charset.forName("utf-8"); - // the set of active connections private static final Set<LogConnection> activeConnections = new HashSet<>(); @@ -57,44 +50,15 @@ public class LogConnection implements Connection { private long totalBytesRead = 0; private long totalBytesWritten = 0; - // default log levels for logd - final Levels defaultLevels; - - public LogConnection (SocketChannel socket, - Listener listener, - LogDispatcher dispatcher, - Levels defaultLevels) { + public LogConnection(SocketChannel socket, + Listener listener, + LogDispatcher dispatcher) { this.socket = socket; this.listener = listener; this.dispatcher = dispatcher; - this.defaultLevels = defaultLevels; addToActiveSet(this); - // send the "setdefaultstate" command to logd. no better - // place to put it for now. - sendDefaultState(); - } - - /** - * Send the default state to the - */ - public void sendDefaultState () { - if (defaultLevels == null) { - return; - } - - try { - enqueue(charset.encode("setdefaultstate " - + defaultLevels.toString() - + "\n")); - enqueue(charset.encode("setallstates " - + defaultLevels.toString() - + "\n")); - } - catch (IOException e) { - log.log(LogLevel.WARNING, "Unable to send default state", e); - } } /** @@ -148,19 +112,6 @@ public class LogConnection implements Connection { } } - /** - * - */ - public synchronized void enqueue (ByteBuffer buffer) throws IOException { - if (writeBuffer == null) { - writeBuffer = buffer; - } else { - writeBufferList.addLast(buffer); - listener.modifyInterestOps(this, SelectionKey.OP_WRITE, true); - } - write(); - } - public void connect () throws IOException { throw new RuntimeException("connect() is not supposed to be called"); } diff --git a/logserver/src/main/java/com/yahoo/logserver/net/LogConnectionFactory.java b/logserver/src/main/java/com/yahoo/logserver/net/LogConnectionFactory.java index 148cceffb42..7ef6f7bb942 100644 --- a/logserver/src/main/java/com/yahoo/logserver/net/LogConnectionFactory.java +++ b/logserver/src/main/java/com/yahoo/logserver/net/LogConnectionFactory.java @@ -1,16 +1,14 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.logserver.net; -import com.yahoo.logserver.LogDispatcher; import com.yahoo.io.Connection; -import com.yahoo.io.Listener; import com.yahoo.io.ConnectionFactory; +import com.yahoo.io.Listener; +import com.yahoo.logserver.LogDispatcher; -import com.yahoo.logserver.net.control.Levels; - +import java.nio.channels.SocketChannel; import java.util.logging.Level; import java.util.logging.Logger; -import java.nio.channels.SocketChannel; /** * @author Bjorn Borud @@ -19,11 +17,9 @@ public class LogConnectionFactory implements ConnectionFactory { private static final Logger log = Logger.getLogger(LogConnectionFactory.class.getName()); private final LogDispatcher dispatcher; - private final Levels defaultLogLevels; public LogConnectionFactory(LogDispatcher dispatcher) { this.dispatcher = dispatcher; - defaultLogLevels = Levels.parse(System.getProperty("logserver.default.loglevels", "")); } public Connection newConnection(SocketChannel socket, Listener listener) { @@ -32,7 +28,6 @@ public class LogConnectionFactory implements ConnectionFactory { } return new LogConnection(socket, listener, - dispatcher, - (Levels) defaultLogLevels.clone()); + dispatcher); } } diff --git a/logserver/src/main/java/com/yahoo/logserver/net/control/Levels.java b/logserver/src/main/java/com/yahoo/logserver/net/control/Levels.java deleted file mode 100644 index 794177c37e7..00000000000 --- a/logserver/src/main/java/com/yahoo/logserver/net/control/Levels.java +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.logserver.net.control; - -import java.util.LinkedHashMap; -import java.util.Map; - -/** - * This class is used to represent the state of each log level - * in a set of states. - * - * @author Bjorn Borud - */ -public class Levels implements Cloneable { - private final Map<String, State> levelsMap = new LinkedHashMap<String, State>(10); - - /** - * The constructor initializes the Levels object to its default - * state. - */ - public Levels () { - levelsMap.put("event", State.FORWARD); - levelsMap.put("fatal", State.FORWARD); - levelsMap.put("error", State.FORWARD); - levelsMap.put("warning", State.FORWARD); - levelsMap.put("info", State.FORWARD); - levelsMap.put("config", State.FORWARD); - levelsMap.put("debug", State.NOFORWARD); - levelsMap.put("spam", State.NOFORWARD); - } - - /** - * Parse a levels representation and return a Levels object - * representing the levels. - * - * @param levels A string representation of the levels - * @return new instance of Levels, possibly having no - * real values if none could be found in the - * <code>levels</code> parameter. - * - */ - public static Levels parse (String levels) { - return (new Levels()).updateLevels(levels); - } - - - /** - * Update the levels given a string representation of the state; - * the levels mentioned here will be updated, the ones omitted - * will retain their state as before the function call. - * - * @param levels string representation of levels - * - */ - public Levels updateLevels (String levels) { - String[] parts = levels.split(","); - if (parts.length < 1) { - return this; - } - - for (int i = 0; i < parts.length; i++) { - String pair = parts[i]; - int offset = pair.indexOf('='); - if (offset != -1) { - String name = pair.substring(0,offset).trim().toLowerCase(); - String value = pair.substring(offset+1).trim().toLowerCase(); - setLevelState(name, State.parse(value)); - } - } - return this; - } - - - /** - * Set the state of a given level. - * - * @param level name of the level - * @param state the state - * @return returns reference to <code>this</code> for chaning - */ - public Levels setLevelState(String level, State state) { - levelsMap.put(level, state); - return this; - } - - /** - * Get the state of a given level. - * - */ - public State getLevelState (String level) { - State s = levelsMap.get(level); - if (s == null) { - return State.UNKNOWN; - } - return s; - } - - /** - * For equivalent configurations the toString method should - * emit equal strings. - * - */ - public String toString () { - StringBuilder sbuf = new StringBuilder(80); - boolean first = true; - for (Map.Entry<String, State> me : levelsMap.entrySet()) { - // commas between - if (!first) { - sbuf.append(','); - } else { - first = false; - } - sbuf.append(me.getKey()) - .append('=') - .append(me.getValue()); - } - - return sbuf.toString(); - } - - public Object clone() { - // quick and dirty, but easily verifiable to be correct - return parse(this.toString()); - } - -} diff --git a/logserver/src/main/java/com/yahoo/logserver/net/control/State.java b/logserver/src/main/java/com/yahoo/logserver/net/control/State.java deleted file mode 100644 index 721c146bdb1..00000000000 --- a/logserver/src/main/java/com/yahoo/logserver/net/control/State.java +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.logserver.net.control; - -import java.util.Map; -import java.util.HashMap; - -/** - * This value class represents the logging state of a component. - * the valid states are: - * - * <UL> - * <LI> forward - store locally and send to log server - * <LI> store - store locally only - * <LI> noforward - do not send to logserver - * <LI> off - do not generate the message in the program - * </UL> - * - * XXX This does not appear to be in use. - */ -public class State { - private static final Map<String, State> nameToState = new HashMap<String, State>(); - - public static final State FORWARD = new State("forward"); - public static final State NOFORWARD = new State("noforward"); - // public static final State STORE = new State("store"); - // public static final State OFF = new State("off"); - public static final State UNKNOWN = new State("unknown"); - - private String name; - - /** - * Typesafe enum. Only able to instantiate self. - * TODO: Rewrite to enum - */ - private State () {} - - /** - * Creates state with given name - */ - private State (String name) { - this.name = name; - synchronized (State.class) { - nameToState.put(name, this); - } - } - - public static State parse (String s) { - return nameToState.containsKey(s) ? nameToState.get(s) : UNKNOWN; - } - - public String toString () { - return name; - } -} diff --git a/logserver/src/test/java/com/yahoo/logserver/handlers/replicator/ReplicatorTestCase.java b/logserver/src/test/java/com/yahoo/logserver/handlers/replicator/ReplicatorTestCase.java index a50e775d487..b26c6236dbb 100644 --- a/logserver/src/test/java/com/yahoo/logserver/handlers/replicator/ReplicatorTestCase.java +++ b/logserver/src/test/java/com/yahoo/logserver/handlers/replicator/ReplicatorTestCase.java @@ -72,8 +72,6 @@ public class ReplicatorTestCase { assertFalse(conn.isLoggable(msg)); assertEquals("system.mute", conn.getLogFilterName()); replicator.doHandle(msg); - conn.read(); - assertEquals(2, conn.getNumHandled()); conn.onFormatter("system.textformatter"); assertEquals(conn.formatter, LogFormatterManager.getLogFormatter("system.textformatter")); conn.onCommand("formatter system.nullformatter"); diff --git a/logserver/src/test/java/com/yahoo/logserver/net/control/test/LevelsTestCase.java b/logserver/src/test/java/com/yahoo/logserver/net/control/test/LevelsTestCase.java deleted file mode 100644 index 03dcf5566e3..00000000000 --- a/logserver/src/test/java/com/yahoo/logserver/net/control/test/LevelsTestCase.java +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.logserver.net.control.test; - -import com.yahoo.logserver.net.control.Levels; -import com.yahoo.logserver.net.control.State; - -import org.junit.*; - -import static org.junit.Assert.*; - -/** - * @author Bjorn Borud - */ -public class LevelsTestCase { - /** - * Make sure the parsing works - */ - @Test - public void testParser() { - Levels levels = Levels.parse("fatal=forward,error=forward,warning=noforward"); - assertNotNull(levels); - assertSame(State.FORWARD, levels.getLevelState("fatal")); - assertSame(State.FORWARD, levels.getLevelState("error")); - assertSame(State.NOFORWARD, levels.getLevelState("warning")); - } - - /** - * Ensure that the Levels are in a known default state. A Levels - * object that was newly created is in a defined default state - * which has been deemed to be "reasonable". In general, it will - * specify forwarding all log levels except "debug" and it will - * specify "spam" to be turned off. - */ - @Test - public void testDefaultLevels() { - Levels levels = new Levels(); - assertSame(State.FORWARD, levels.getLevelState("event")); - assertSame(State.FORWARD, levels.getLevelState("fatal")); - assertSame(State.FORWARD, levels.getLevelState("error")); - assertSame(State.FORWARD, levels.getLevelState("warning")); - assertSame(State.FORWARD, levels.getLevelState("info")); - assertSame(State.FORWARD, levels.getLevelState("config")); - assertSame(State.NOFORWARD, levels.getLevelState("debug")); - assertSame(State.NOFORWARD, levels.getLevelState("spam")); - } - - /** - * This test also documents/verifies the default behavior - * of the Levels class. - */ - @Test - public void testToString() { - String in = "fatal=forward,error=forward,warning=noforward"; - String out = "event=forward,fatal=forward,error=forward,warning=noforward,info=forward,config=forward,debug=noforward,spam=noforward"; - Levels levels = Levels.parse(in); - assertEquals(out, levels.toString()); - - } - - /** - * Clone testing - */ - @Test - public void testClone() { - Levels l1 = Levels.parse("error=noforward"); - assertEquals(l1.toString(), l1.clone().toString()); - assertSame(State.NOFORWARD, l1.getLevelState("error")); - assertSame(State.NOFORWARD, ((Levels) l1.clone()).getLevelState("error")); - assertSame(l1.getLevelState("error"), - ((Levels) l1.clone()).getLevelState("error")); - } - - /** - * test parser - */ - @Test - public void testUpdateLevels() { - Levels l1 = Levels.parse("error=noforward"); - assertSame(State.NOFORWARD, l1.getLevelState("error")); - - // should be unaffected - assertSame(State.FORWARD, l1.getLevelState("warning")); - - // update and check that the update worked - l1.updateLevels("error=noforward"); - assertSame(State.NOFORWARD, l1.getLevelState("error")); - - // should be unaffected - assertSame(State.FORWARD, l1.getLevelState("warning")); - } -} diff --git a/logserver/src/test/java/com/yahoo/logserver/net/test/LogConnectionTestCase.java b/logserver/src/test/java/com/yahoo/logserver/net/test/LogConnectionTestCase.java index 6d1ab45959c..799de5ac8c6 100644 --- a/logserver/src/test/java/com/yahoo/logserver/net/test/LogConnectionTestCase.java +++ b/logserver/src/test/java/com/yahoo/logserver/net/test/LogConnectionTestCase.java @@ -150,7 +150,7 @@ public class LogConnectionTestCase { assertTrue(mock.getName().endsWith("MockHandler")); dispatcher.registerLogHandler(mock); LogConnection logConnection = - new LogConnection(sock, null, dispatcher, null); + new LogConnection(sock, null, dispatcher); try { for (int i = 0; i < 100; i++) { |