From 25dd0ea7385132d9e07b8b00eeea9425a43104a7 Mon Sep 17 00:00:00 2001 From: Frankie Wu Date: Fri, 14 Sep 2012 17:50:25 +0800 Subject: [PATCH] bug fix and code cleanup --- .../com/dianping/bee/engine/QueryService.java | 1 - .../engine/build/ComponentsConfigurator.java | 5 ++- .../evaluator/function/CountEvaluator.java | 32 +++++++++++++++++-- .../dianping/bee/engine/spi/RowContext.java | 10 +++--- .../spi/internal/DefaultRowContext.java | 30 +++++++++++------ .../spi/internal/DefaultRowListener.java | 2 +- .../spi/internal/DefaultStatementManager.java | 8 ++++- .../bee/engine/spi/internal/SelectField.java | 13 +++++--- .../bee/server/SimpleServerConnection.java | 10 +++++- .../server/SimpleServerConnectionFactory.java | 4 +-- .../bee/server/SimpleServerQueryHandler.java | 7 +++- .../cat/build/CodecComponentConfigurator.java | 2 -- .../message/spi/codec/HtmlMessageCodec.java | 12 ++----- .../spi/codec/WaterfallMessageCodec.java | 8 ----- .../cat/report/page/database/Handler.java | 9 ++---- .../resources/META-INF/plexus/components.xml | 3 -- 16 files changed, 95 insertions(+), 61 deletions(-) diff --git a/bee-engine/src/main/java/com/dianping/bee/engine/QueryService.java b/bee-engine/src/main/java/com/dianping/bee/engine/QueryService.java index f751c4f97..c8edf0194 100644 --- a/bee-engine/src/main/java/com/dianping/bee/engine/QueryService.java +++ b/bee-engine/src/main/java/com/dianping/bee/engine/QueryService.java @@ -2,7 +2,6 @@ package com.dianping.bee.engine; import java.sql.SQLException; - public interface QueryService { public RowSet query(String sql, Object... params) throws SQLException; diff --git a/bee-engine/src/main/java/com/dianping/bee/engine/build/ComponentsConfigurator.java b/bee-engine/src/main/java/com/dianping/bee/engine/build/ComponentsConfigurator.java index cc4b26c72..4a5f588e1 100644 --- a/bee-engine/src/main/java/com/dianping/bee/engine/build/ComponentsConfigurator.java +++ b/bee-engine/src/main/java/com/dianping/bee/engine/build/ComponentsConfigurator.java @@ -79,7 +79,7 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { all.add(C(TableHelper.class) // .req(TableProviderManager.class)); - all.add(C(RowContext.class, DefaultRowContext.class)); + all.add(C(RowContext.class, DefaultRowContext.class).is(PER_LOOKUP)); all.add(C(SingleTableStatement.class).is(PER_LOOKUP)// .req(RowContext.class)); all.add(C(SingleTableRowFilter.class).is(PER_LOOKUP)); @@ -146,8 +146,7 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { all.add(C(Evaluator.class, ComparisionEqualsEvaluator.ID, ComparisionEqualsEvaluator.class)); all.add(C(Evaluator.class, ComparisionIsEvaluator.ID, ComparisionIsEvaluator.class)); all.add(C(Evaluator.class, ComparisionGreaterThanEvaluator.ID, ComparisionGreaterThanEvaluator.class)); - all.add(C(Evaluator.class, ComparisionGreaterThanOrEqualsEvaluator.ID, - ComparisionGreaterThanOrEqualsEvaluator.class)); + all.add(C(Evaluator.class, ComparisionGreaterThanOrEqualsEvaluator.ID, ComparisionGreaterThanOrEqualsEvaluator.class)); all.add(C(Evaluator.class, ComparisionLessThanEvaluator.ID, ComparisionLessThanEvaluator.class)); all.add(C(Evaluator.class, ComparisionLessThanOrEqualsEvaluator.ID, ComparisionLessThanOrEqualsEvaluator.class)); diff --git a/bee-engine/src/main/java/com/dianping/bee/engine/evaluator/function/CountEvaluator.java b/bee-engine/src/main/java/com/dianping/bee/engine/evaluator/function/CountEvaluator.java index a121fb512..45fcb2ccd 100644 --- a/bee-engine/src/main/java/com/dianping/bee/engine/evaluator/function/CountEvaluator.java +++ b/bee-engine/src/main/java/com/dianping/bee/engine/evaluator/function/CountEvaluator.java @@ -1,5 +1,10 @@ package com.dianping.bee.engine.evaluator.function; +import java.util.HashSet; +import java.util.Set; + +import com.alibaba.cobar.parser.ast.expression.Expression; +import com.alibaba.cobar.parser.ast.expression.primary.Wildcard; import com.alibaba.cobar.parser.ast.expression.primary.function.groupby.Count; import com.dianping.bee.engine.evaluator.AbstractEvaluator; import com.dianping.bee.engine.spi.RowContext; @@ -9,15 +14,38 @@ public class CountEvaluator extends AbstractEvaluator { private long m_count; + private Set m_distincts; + @Override public Number evaluate(RowContext ctx, Count expr) { - m_count++; + if (expr.isDistinct()) { + if (m_distincts == null) { + m_distincts = new HashSet(); + } + + Expression first = expr.getArguments().get(0); + + if (first instanceof Wildcard) { + m_count++; + } else { + Object val = eval(ctx, first); + + m_distincts.add(val); + } + } else { + m_count++; + } + return 0; } @Override public Object getAggregatedValue() { - return m_count; + if (m_distincts != null) { + return m_distincts.size(); + } else { + return m_count; + } } @Override diff --git a/bee-engine/src/main/java/com/dianping/bee/engine/spi/RowContext.java b/bee-engine/src/main/java/com/dianping/bee/engine/spi/RowContext.java index 5bd4c4fd8..df5fa63b2 100644 --- a/bee-engine/src/main/java/com/dianping/bee/engine/spi/RowContext.java +++ b/bee-engine/src/main/java/com/dianping/bee/engine/spi/RowContext.java @@ -3,8 +3,6 @@ package com.dianping.bee.engine.spi; import java.util.List; import java.util.Map; -import com.dianping.bee.engine.evaluator.Evaluator; - public interface RowContext { public void afterQuery(); @@ -18,8 +16,6 @@ public interface RowContext { public int getColumnSize(); - public Evaluator getEvaluator(String name); - public T getFirstAttribute(String name, T defaultValue); public T getParameter(int colIndex); @@ -28,6 +24,12 @@ public interface RowContext { public T getValue(String columnName); + public T lookupComponent(Class role); + + public T lookupComponent(Class role, String roleHint); + + public void releaseComponent(Object component); + public void setAttributes(Map> m_attributes); public void setColumns(ColumnMeta[] columns); diff --git a/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/DefaultRowContext.java b/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/DefaultRowContext.java index 4ec8b9001..7909d809c 100644 --- a/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/DefaultRowContext.java +++ b/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/DefaultRowContext.java @@ -4,7 +4,6 @@ import java.util.Arrays; import java.util.List; import java.util.Map; -import com.dianping.bee.engine.evaluator.Evaluator; import com.dianping.bee.engine.spi.ColumnMeta; import com.dianping.bee.engine.spi.RowContext; import com.dianping.bee.engine.spi.RowListener; @@ -22,9 +21,9 @@ public class DefaultRowContext extends ContainerHolder implements RowContext { private Map> m_attributes; @Override - public void afterQuery() { + public void afterQuery() { m_listener.onEnd(this); - } + } @Override public void applyRow() { @@ -33,9 +32,9 @@ public class DefaultRowContext extends ContainerHolder implements RowContext { } @Override - public void beforeQuery() { + public void beforeQuery() { m_listener.onBegin(this); - } + } @SuppressWarnings("unchecked") @Override @@ -54,10 +53,6 @@ public class DefaultRowContext extends ContainerHolder implements RowContext { return m_columns.length; } - public Evaluator getEvaluator(String name) { - return lookup(Evaluator.class, name); - } - @SuppressWarnings("unchecked") @Override public T getFirstAttribute(String name, T defaultValue) { @@ -75,7 +70,7 @@ public class DefaultRowContext extends ContainerHolder implements RowContext { public T getParameter(int colIndex) { return (T) m_parameters[colIndex]; } - + @SuppressWarnings("unchecked") @Override public T getValue(int colIndex) { @@ -98,6 +93,21 @@ public class DefaultRowContext extends ContainerHolder implements RowContext { return null; } + @Override + public T lookupComponent(Class role) { + return lookup(role); + } + + @Override + public T lookupComponent(Class role, String roleHint) { + return lookup(role, roleHint); + } + + @Override + public void releaseComponent(Object component) { + release(component); + } + public void setAttributes(Map> attributes) { m_attributes = attributes; } diff --git a/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/DefaultRowListener.java b/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/DefaultRowListener.java index 3d1620a71..4a6e4f33c 100644 --- a/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/DefaultRowListener.java +++ b/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/DefaultRowListener.java @@ -87,7 +87,7 @@ public class DefaultRowListener extends ContainerHolder implements RowListener { if (field.isAggregator(ctx)) { m_values[i] = field.getAggregatedValue(); - field.reset(); + field.reset(ctx); } cells[i] = new DefaultCell(field, m_values[i]); diff --git a/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/DefaultStatementManager.java b/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/DefaultStatementManager.java index 14dc17eb3..8654ddc49 100644 --- a/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/DefaultStatementManager.java +++ b/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/DefaultStatementManager.java @@ -92,7 +92,13 @@ public class DefaultStatementManager extends ContainerHolder implements Statemen @Override protected boolean removeEldestEntry(Entry eldest) { - return size() > m_capacity; + boolean shouldRemove = size() > m_capacity; + + if (shouldRemove) { + release(eldest.getValue()); + } + + return shouldRemove; } } } diff --git a/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/SelectField.java b/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/SelectField.java index d82cf7429..b4146c3be 100644 --- a/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/SelectField.java +++ b/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/SelectField.java @@ -62,7 +62,8 @@ class SelectField implements ColumnMeta { @SuppressWarnings("unchecked") private Evaluator getEvaluator(RowContext ctx) { if (m_evaluator == null) { - Evaluator evaluator = (Evaluator) ctx.getEvaluator(m_expr.getClass().getName()); + String name = m_expr.getClass().getName(); + Evaluator evaluator = (Evaluator) ctx.lookupComponent(Evaluator.class, name); m_evaluator = evaluator; } @@ -81,7 +82,8 @@ class SelectField implements ColumnMeta { @SuppressWarnings("unchecked") public boolean isAggregator(RowContext ctx) { if (m_expr != null) { - Evaluator evaluator = (Evaluator) ctx.getEvaluator(m_expr.getClass().getName()); + String name = m_expr.getClass().getName(); + Evaluator evaluator = (Evaluator) ctx.lookupComponent(Evaluator.class, name); return evaluator.isAggregator(); } else { @@ -89,7 +91,10 @@ class SelectField implements ColumnMeta { } } - public void reset() { - m_evaluator = null; + public void reset(RowContext ctx) { + if (m_evaluator != null) { + ctx.releaseComponent(m_evaluator); + m_evaluator = null; + } } } \ No newline at end of file diff --git a/bee-engine/src/main/java/com/dianping/bee/server/SimpleServerConnection.java b/bee-engine/src/main/java/com/dianping/bee/server/SimpleServerConnection.java index cc7cc726d..b702dfe42 100644 --- a/bee-engine/src/main/java/com/dianping/bee/server/SimpleServerConnection.java +++ b/bee-engine/src/main/java/com/dianping/bee/server/SimpleServerConnection.java @@ -45,6 +45,13 @@ public class SimpleServerConnection extends ServerConnection { super(channel); } + @Override + public boolean close() { + ((SimpleServerQueryHandler) queryHandler).close(); + + return super.close(); + } + // commands -------------------------------------------------------------- /** * Override parent method in FrontendConnection @@ -111,7 +118,8 @@ public class SimpleServerConnection extends ServerConnection { } } - @Override + @SuppressWarnings("unused") + @Override public void stmtExecute(byte[] data) { LOGGER.info("StmtExecute : " + data); m_sessionManager.getSession().setDatabase(getSchema()); diff --git a/bee-engine/src/main/java/com/dianping/bee/server/SimpleServerConnectionFactory.java b/bee-engine/src/main/java/com/dianping/bee/server/SimpleServerConnectionFactory.java index d132d3092..4e713f566 100644 --- a/bee-engine/src/main/java/com/dianping/bee/server/SimpleServerConnectionFactory.java +++ b/bee-engine/src/main/java/com/dianping/bee/server/SimpleServerConnectionFactory.java @@ -35,9 +35,7 @@ public class SimpleServerConnectionFactory extends FrontendConnectionFactory { protected FrontendConnection getConnection(SocketChannel channel) { LOGGER.info("getConnection : " + channel); SimpleServerConnection c = new SimpleServerConnection(channel); - FrontendQueryHandler queryHandler = getQueryHandler(c); // TODO use - // another one for - // test + FrontendQueryHandler queryHandler = getQueryHandler(c); c.setSessionManager(getSessionManager()); c.setQueryHandler(queryHandler); diff --git a/bee-engine/src/main/java/com/dianping/bee/server/SimpleServerQueryHandler.java b/bee-engine/src/main/java/com/dianping/bee/server/SimpleServerQueryHandler.java index 1514a229f..7df638069 100644 --- a/bee-engine/src/main/java/com/dianping/bee/server/SimpleServerQueryHandler.java +++ b/bee-engine/src/main/java/com/dianping/bee/server/SimpleServerQueryHandler.java @@ -19,9 +19,10 @@ import com.dianping.bee.engine.spi.handler.SelectHandler; import com.dianping.bee.engine.spi.handler.SetHandler; import com.dianping.bee.engine.spi.handler.ShowHandler; import com.dianping.bee.engine.spi.handler.UseHandler; +import com.site.lookup.ContainerHolder; import com.site.lookup.annotation.Inject; -public class SimpleServerQueryHandler implements FrontendQueryHandler { +public class SimpleServerQueryHandler extends ContainerHolder implements FrontendQueryHandler { private static final Logger LOGGER = Logger.getLogger(SimpleServerQueryHandler.class); @@ -45,6 +46,10 @@ public class SimpleServerQueryHandler implements FrontendQueryHandler { private ServerConnection m_conn; + public void close() { + release(this); + } + public PreparedStatement getStatement(Long stmtId) { return m_prepareHandler.getStatement(stmtId); } diff --git a/cat-core/src/main/java/com/dianping/cat/build/CodecComponentConfigurator.java b/cat-core/src/main/java/com/dianping/cat/build/CodecComponentConfigurator.java index 9da3ee117..d6d59cdce 100644 --- a/cat-core/src/main/java/com/dianping/cat/build/CodecComponentConfigurator.java +++ b/cat-core/src/main/java/com/dianping/cat/build/CodecComponentConfigurator.java @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.List; import com.dianping.cat.message.spi.MessageCodec; -import com.dianping.cat.message.spi.MessagePathBuilder; import com.dianping.cat.message.spi.codec.BufferWriter; import com.dianping.cat.message.spi.codec.EscapingBufferWriter; import com.dianping.cat.message.spi.codec.HtmlEncodingBufferWriter; @@ -24,7 +23,6 @@ class CodecComponentConfigurator extends AbstractResourceConfigurator { all.add(C(MessageCodec.class, PlainTextMessageCodec.ID, PlainTextMessageCodec.class) // .req(BufferWriter.class, EscapingBufferWriter.ID)); all.add(C(MessageCodec.class, HtmlMessageCodec.ID, HtmlMessageCodec.class) // - .req(MessagePathBuilder.class) // .req(BufferWriter.class, HtmlEncodingBufferWriter.ID)); return all; diff --git a/cat-core/src/main/java/com/dianping/cat/message/spi/codec/HtmlMessageCodec.java b/cat-core/src/main/java/com/dianping/cat/message/spi/codec/HtmlMessageCodec.java index 47cee5aa4..9b714b4f2 100644 --- a/cat-core/src/main/java/com/dianping/cat/message/spi/codec/HtmlMessageCodec.java +++ b/cat-core/src/main/java/com/dianping/cat/message/spi/codec/HtmlMessageCodec.java @@ -17,7 +17,6 @@ import com.dianping.cat.message.Heartbeat; import com.dianping.cat.message.Message; import com.dianping.cat.message.Transaction; import com.dianping.cat.message.spi.MessageCodec; -import com.dianping.cat.message.spi.MessagePathBuilder; import com.dianping.cat.message.spi.MessageTree; import com.site.lookup.annotation.Inject; @@ -32,9 +31,6 @@ public class HtmlMessageCodec implements MessageCodec, Initializable { @Inject private BufferWriter m_writer; - @Inject - private MessagePathBuilder m_builder; - @Inject private String m_logViewPrefix = "/cat/r/m/"; @@ -191,8 +187,8 @@ public class HtmlMessageCodec implements MessageCodec, Initializable { count += helper.td1(buf); count += helper.nbsp(buf, level * 2); // 2 spaces per level - count += helper.write(buf, String.format("[:: show ::]", - m_logViewPrefix, link, link)); + count += helper.write(buf, + String.format("[:: show ::]", m_logViewPrefix, link, link)); count += helper.td2(buf); count += helper.td(buf, "
", "colspan=\"4\""); @@ -256,10 +252,6 @@ public class HtmlMessageCodec implements MessageCodec, Initializable { m_logViewPrefix = logViewPrefix; } - public void setMessagePathBuilder(MessagePathBuilder builder) { - m_builder = builder; - } - public void setShowNav(boolean showNav) { m_showNav = showNav; } diff --git a/cat-core/src/main/java/com/dianping/cat/message/spi/codec/WaterfallMessageCodec.java b/cat-core/src/main/java/com/dianping/cat/message/spi/codec/WaterfallMessageCodec.java index 8e5907610..503e12c4c 100644 --- a/cat-core/src/main/java/com/dianping/cat/message/spi/codec/WaterfallMessageCodec.java +++ b/cat-core/src/main/java/com/dianping/cat/message/spi/codec/WaterfallMessageCodec.java @@ -10,7 +10,6 @@ import org.jboss.netty.buffer.ChannelBuffer; import com.dianping.cat.message.Message; import com.dianping.cat.message.Transaction; import com.dianping.cat.message.spi.MessageCodec; -import com.dianping.cat.message.spi.MessagePathBuilder; import com.dianping.cat.message.spi.MessageTree; import com.site.lookup.annotation.Inject; @@ -25,9 +24,6 @@ public class WaterfallMessageCodec implements MessageCodec, Initializable { @Inject private BufferWriter m_writer; - @Inject - private MessagePathBuilder m_builder; - @Inject private boolean m_showNav = true; @@ -141,10 +137,6 @@ public class WaterfallMessageCodec implements MessageCodec, Initializable { m_bufferHelper = new BufferHelper(m_writer); } - public void setMessagePathBuilder(MessagePathBuilder builder) { - m_builder = builder; - } - public void setShowNav(boolean showNav) { m_showNav = showNav; } diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/database/Handler.java b/cat-home/src/main/java/com/dianping/cat/report/page/database/Handler.java index 02093565f..bc1f7e88d 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/database/Handler.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/database/Handler.java @@ -9,7 +9,6 @@ import java.util.Set; import javax.servlet.ServletException; import com.dianping.cat.Cat; -import com.dianping.cat.configuration.ServerConfigManager; import com.dianping.cat.consumer.database.model.entity.DatabaseReport; import com.dianping.cat.consumer.database.model.transform.DefaultSaxParser; import com.dianping.cat.hadoop.dal.Dailyreport; @@ -38,7 +37,6 @@ import com.site.web.mvc.annotation.PayloadMeta; * @author youyong */ public class Handler implements PageHandler { - public static final long ONE_HOUR = 3600 * 1000L; @Inject @@ -53,9 +51,6 @@ public class Handler implements PageHandler { @Inject private JspViewer m_jspViewer; - @Inject - private ServerConfigManager m_manager; - @Inject(type = ModelService.class, value = "database") private ModelService m_service; @@ -178,8 +173,8 @@ public class Handler implements PageHandler { } } else { try { - List reports = m_dailyreportDao.findDatabaseAllByDomainNameDuration(start, end, database, - "database", DailyreportEntity.READSET_FULL); + List reports = m_dailyreportDao.findDatabaseAllByDomainNameDuration(start, end, database, "database", + DailyreportEntity.READSET_FULL); DatabaseReportMerger merger = new DatabaseReportMerger(new DatabaseReport(database)); for (Dailyreport report : reports) { String xml = report.getContent(); diff --git a/cat-home/src/main/resources/META-INF/plexus/components.xml b/cat-home/src/main/resources/META-INF/plexus/components.xml index 054271fee..ad23e3339 100755 --- a/cat-home/src/main/resources/META-INF/plexus/components.xml +++ b/cat-home/src/main/resources/META-INF/plexus/components.xml @@ -1991,9 +1991,6 @@ com.dianping.cat.report.page.database.JspViewer - - com.dianping.cat.configuration.ServerConfigManager - com.dianping.cat.report.page.model.spi.ModelService database -- GitLab