http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardCounterTest.java ---------------------------------------------------------------------- diff --git a/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardCounterTest.java b/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardCounterTest.java new file mode 100644 index 0000000..b037196 --- /dev/null +++ b/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardCounterTest.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics.dropwizard3; + +import com.codahale.metrics.Counter; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +/** + * Test class for {@link DropwizardCounter}. + */ +public class DropwizardCounterTest { + + private Counter counter; + + @Before public void setup() { + this.counter = new Counter(); + } + + @Test public void testCounting() { + DropwizardCounter dwCounter = new DropwizardCounter(counter); + + dwCounter.increment(); + assertEquals(1L, counter.getCount()); + dwCounter.increment(); + assertEquals(2L, counter.getCount()); + dwCounter.increment(2L); + assertEquals(4L, counter.getCount()); + dwCounter.increment(-1L); + assertEquals(3L, counter.getCount()); + + dwCounter.decrement(); + assertEquals(2L, counter.getCount()); + dwCounter.decrement(); + assertEquals(1L, counter.getCount()); + dwCounter.decrement(4L); + assertEquals(-3L, counter.getCount()); + dwCounter.decrement(-3L); + assertEquals(0L, counter.getCount()); + } + +} + +// End DropwizardCounterTest.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardGaugeTest.java ---------------------------------------------------------------------- diff --git a/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardGaugeTest.java b/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardGaugeTest.java new file mode 100644 index 0000000..ed78a58 --- /dev/null +++ b/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardGaugeTest.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics.dropwizard3; + +import org.apache.calcite.avatica.metrics.Gauge; + +import org.junit.Test; + +import java.util.concurrent.atomic.AtomicLong; + +import static org.junit.Assert.assertEquals; + +/** + * Test class for {@link DropwizardGauge}. + */ +public class DropwizardGaugeTest { + + @Test public void test() { + SimpleGauge gauge = new SimpleGauge(); + DropwizardGauge<Long> dwGauge = new DropwizardGauge<>(gauge); + + assertEquals(gauge.getValue(), dwGauge.getValue()); + + gauge.setValue(1000L); + + assertEquals(gauge.getValue(), dwGauge.getValue()); + } + + /** + * Gauge implementation with a setter. + */ + private static class SimpleGauge implements Gauge<Long> { + + private final AtomicLong value = new AtomicLong(0L); + + @Override public Long getValue() { + return this.value.get(); + } + + public void setValue(long value) { + this.value.set(value); + } + } +} + +// End DropwizardGaugeTest.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardHistogramTest.java ---------------------------------------------------------------------- diff --git a/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardHistogramTest.java b/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardHistogramTest.java new file mode 100644 index 0000000..25ec5c0 --- /dev/null +++ b/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardHistogramTest.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics.dropwizard3; + +import com.codahale.metrics.Histogram; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; + +/** + * Test class for {@link DropwizardHistogram}. + */ +public class DropwizardHistogramTest { + + private Histogram histogram; + + @Before public void setup() { + this.histogram = Mockito.mock(Histogram.class); + } + + @Test public void test() { + DropwizardHistogram dwHistogram = new DropwizardHistogram(histogram); + + dwHistogram.update(10); + + dwHistogram.update(100L); + + Mockito.verify(histogram).update(10); + Mockito.verify(histogram).update(100L); + } + +} + +// End DropwizardHistogramTest.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardMeterTest.java ---------------------------------------------------------------------- diff --git a/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardMeterTest.java b/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardMeterTest.java new file mode 100644 index 0000000..c76c7e0 --- /dev/null +++ b/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardMeterTest.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics.dropwizard3; + +import com.codahale.metrics.Meter; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; + +/** + * Test class for {@link DropwizardMeter}. + */ +public class DropwizardMeterTest { + + private Meter meter; + + @Before public void setup() { + this.meter = Mockito.mock(Meter.class); + } + + @Test public void test() { + DropwizardMeter dwMeter = new DropwizardMeter(this.meter); + + dwMeter.mark(); + dwMeter.mark(10L); + dwMeter.mark(); + dwMeter.mark(); + + Mockito.verify(meter, Mockito.times(3)).mark(); + Mockito.verify(meter).mark(10L); + } + +} + +// End DropwizardMeterTest.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardMetricsSystemFactoryTest.java ---------------------------------------------------------------------- diff --git a/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardMetricsSystemFactoryTest.java b/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardMetricsSystemFactoryTest.java new file mode 100644 index 0000000..332c6e0 --- /dev/null +++ b/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardMetricsSystemFactoryTest.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics.dropwizard3; + +import org.apache.calcite.avatica.metrics.noop.NoopMetricsSystemConfiguration; + +import com.codahale.metrics.MetricRegistry; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertNotNull; + +/** + * Test class for {@link DropwizardMetricsSystemFactory}. + */ +public class DropwizardMetricsSystemFactoryTest { + + private DropwizardMetricsSystemFactory factory; + + @Before public void setup() { + factory = new DropwizardMetricsSystemFactory(); + } + + @Test(expected = IllegalStateException.class) public void testNullConfigurationFails() { + factory.create(null); + } + + @Test(expected = IllegalStateException.class) public void testUnhandledConfigurationType() { + factory.create(NoopMetricsSystemConfiguration.getInstance()); + } + + @Test public void testHandledConfigurationType() { + DropwizardMetricsSystem metrics = + factory.create(new DropwizardMetricsSystemConfiguration(new MetricRegistry())); + assertNotNull("Expected DropwizardMetricsSystem to be non-null", metrics); + } +} + +// End DropwizardMetricsSystemFactoryTest.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardMetricsSystemTest.java ---------------------------------------------------------------------- diff --git a/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardMetricsSystemTest.java b/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardMetricsSystemTest.java new file mode 100644 index 0000000..7eeec3b --- /dev/null +++ b/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardMetricsSystemTest.java @@ -0,0 +1,161 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics.dropwizard3; + +import org.apache.calcite.avatica.metrics.Counter; +import org.apache.calcite.avatica.metrics.Gauge; +import org.apache.calcite.avatica.metrics.Histogram; +import org.apache.calcite.avatica.metrics.Meter; +import org.apache.calcite.avatica.metrics.Timer; +import org.apache.calcite.avatica.metrics.Timer.Context; + +import com.codahale.metrics.MetricRegistry; + +import org.junit.Before; +import org.junit.Test; + +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +/** + * Tests for {@link DropwizardMetricsSystem}. + */ +public class DropwizardMetricsSystemTest { + + private MetricRegistry mockRegistry; + private DropwizardMetricsSystem metrics; + + @Before public void setup() { + mockRegistry = mock(MetricRegistry.class); + metrics = new DropwizardMetricsSystem(mockRegistry); + } + + @Test public void testGauge() { + final long gaugeValue = 42L; + final String name = "gauge"; + metrics.register(name, new Gauge<Long>() { + @Override public Long getValue() { + return gaugeValue; + } + }); + + verify(mockRegistry, times(1)).register(eq(name), any(com.codahale.metrics.Gauge.class)); + } + + @Test public void testMeter() { + final String name = "meter"; + final com.codahale.metrics.Meter mockMeter = mock(com.codahale.metrics.Meter.class); + + when(mockRegistry.meter(name)).thenReturn(mockMeter); + + Meter meter = metrics.getMeter(name); + + final long count = 5; + meter.mark(count); + + verify(mockMeter, times(1)).mark(count); + + meter.mark(); + + verify(mockMeter, times(1)).mark(); + } + + @Test public void testHistogram() { + final String name = "histogram"; + final com.codahale.metrics.Histogram mockHistogram = mock(com.codahale.metrics.Histogram.class); + + when(mockRegistry.histogram(name)).thenReturn(mockHistogram); + + Histogram histogram = metrics.getHistogram(name); + + long[] long_values = new long[] {1L, 5L, 15L, 30L, 60L}; + for (long value : long_values) { + histogram.update(value); + } + + for (long value : long_values) { + verify(mockHistogram).update(value); + } + + int[] int_values = new int[] {2, 6, 16, 31, 61}; + for (int value : int_values) { + histogram.update(value); + } + + for (int value : int_values) { + verify(mockHistogram).update(value); + } + } + + @Test public void testCounter() { + final String name = "counter"; + final com.codahale.metrics.Counter mockCounter = mock(com.codahale.metrics.Counter.class); + + when(mockRegistry.counter(name)).thenReturn(mockCounter); + + Counter counter = metrics.getCounter(name); + + long[] updates = new long[] {1L, 5L, -2L, 4L, -8L, 0}; + for (long update : updates) { + if (update < 0) { + counter.decrement(Math.abs(update)); + } else { + counter.increment(update); + } + } + + for (long update : updates) { + if (update < 0) { + verify(mockCounter).dec(Math.abs(update)); + } else { + verify(mockCounter).inc(update); + } + } + + int numSingleUpdates = 3; + for (int i = 0; i < numSingleUpdates; i++) { + counter.increment(); + counter.decrement(); + } + + verify(mockCounter, times(numSingleUpdates)).inc(); + verify(mockCounter, times(numSingleUpdates)).dec(); + } + + @Test public void testTimer() { + final String name = "timer"; + final com.codahale.metrics.Timer mockTimer = mock(com.codahale.metrics.Timer.class); + final com.codahale.metrics.Timer.Context mockContext = + mock(com.codahale.metrics.Timer.Context.class); + + when(mockRegistry.timer(name)).thenReturn(mockTimer); + when(mockTimer.time()).thenReturn(mockContext); + + Timer timer = metrics.getTimer(name); + Context context = timer.start(); + context.close(); + + verify(mockTimer).time(); + verify(mockContext).stop(); + } +} + +// End DropwizardMetricsSystemTest.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardTimerTest.java ---------------------------------------------------------------------- diff --git a/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardTimerTest.java b/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardTimerTest.java new file mode 100644 index 0000000..536d935 --- /dev/null +++ b/avatica/metrics-dropwizardmetrics3/src/test/java/org/apache/calcite/avatica/metrics/dropwizard3/DropwizardTimerTest.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics.dropwizard3; + +import org.apache.calcite.avatica.metrics.dropwizard3.DropwizardTimer.DropwizardContext; + +import com.codahale.metrics.Timer; +import com.codahale.metrics.Timer.Context; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; + +/** + * Test class for {@link DropwizardTimer} + */ +public class DropwizardTimerTest { + + private Timer timer; + private Context context; + + @Before public void setup() { + this.timer = Mockito.mock(Timer.class); + this.context = Mockito.mock(Context.class); + } + + @Test public void test() { + DropwizardTimer dwTimer = new DropwizardTimer(timer); + + Mockito.when(timer.time()).thenReturn(context); + + DropwizardContext dwContext = dwTimer.start(); + + dwContext.close(); + + Mockito.verify(timer).time(); + Mockito.verify(context).stop(); + } + +} + +// End DropwizardTimerTest.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/pom.xml ---------------------------------------------------------------------- diff --git a/avatica/metrics/pom.xml b/avatica/metrics/pom.xml new file mode 100644 index 0000000..1b8ad66 --- /dev/null +++ b/avatica/metrics/pom.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to you under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.calcite.avatica</groupId> + <artifactId>calcite-avatica-parent</artifactId> + <version>1.7.0-SNAPSHOT</version> + </parent> + + <artifactId>calcite-avatica-metrics</artifactId> + <packaging>jar</packaging> + <name>Calcite Avatica Metrics</name> + <description>A library designed to abstract away any required dependency on a metrics library</description> + + <properties> + <top.dir>${project.basedir}/..</top.dir> + </properties> + + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-all</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <pluginManagement> + <plugins> + <plugin> + <groupId>org.eclipse.m2e</groupId> + <artifactId>lifecycle-mapping</artifactId> + <version>1.0.0</version> + <configuration> + <lifecycleMappingMetadata> + <pluginExecutions> + <pluginExecution> + <pluginExecutionFilter> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-checkstyle-plugin</artifactId> + <versionRange>[2.12.1,)</versionRange> + <goals> + <goal>check</goal> + </goals> + </pluginExecutionFilter> + <action> + <ignore /> + </action> + </pluginExecution> + </pluginExecutions> + </lifecycleMappingMetadata> + </configuration> + </plugin> + </plugins> + </pluginManagement> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-dependency-plugin</artifactId> + <!-- configurations do not cascade, so all of the definition from + ../pom.xml:build:plugin-management:plugins:plugin must be repeated in child poms --> + <executions> + <execution> + <id>analyze</id> + <goals> + <goal>analyze-only</goal> + </goals> + <configuration> + <failOnWarning>true</failOnWarning> + <!-- ignore "unused but declared" warnings --> + <ignoredUnusedDeclaredDependencies> + <ignoredUnusedDeclaredDependency>org.slf4j:slf4j-log4j12</ignoredUnusedDeclaredDependency> + </ignoredUnusedDeclaredDependencies> + </configuration> + </execution> + </executions> + </plugin> + <!-- Parent module has the same plugin and does the work of + generating -sources.jar for each project. But without the + plugin declared here, IDEs don't know the sources are + available. --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-source-plugin</artifactId> + <executions> + <execution> + <id>attach-sources</id> + <phase>verify</phase> + <goals> + <goal>jar-no-fork</goal> + <goal>test-jar-no-fork</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <artifactId>maven-remote-resources-plugin</artifactId> + <executions> + <execution> + <id>non-root-resources</id> + <goals> + <goal>process</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Counter.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Counter.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Counter.java new file mode 100644 index 0000000..87aec1b --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Counter.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics; + +/** + * A mutable number. + */ +public interface Counter { + + /** + * Increment {@code this} by 1. + */ + void increment(); + + /** + * Increment {@code this} by {@code n}. + * + * @param n The amount to increment. + */ + void increment(long n); + + /** + * Decrement {@code this} by 1. + */ + void decrement(); + + /** + * Decrement {@code this} by {@code n}. + * + * @param n The amount to decrement. + */ + void decrement(long n); +} + +// End Counter.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Gauge.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Gauge.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Gauge.java new file mode 100644 index 0000000..6313a9a --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Gauge.java @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics; + +/** + * A metrics which measures a discrete value. + * + * @param <T> The value of the Gauge. + */ +public interface Gauge<T> extends Metric { + + T getValue(); + +} + +// End Gauge.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Histogram.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Histogram.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Histogram.java new file mode 100644 index 0000000..633af78 --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Histogram.java @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics; + +/** + * A metric which measures the distribution of values. + */ +public interface Histogram extends Metric { + + /** + * Adds a new value to the distribution. + * + * @param value The value to add + */ + void update(int value); + + /** + * Adds a new value to the distribution. + * + * @param value The value to add + */ + void update(long value); + +} + +// End Histogram.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Meter.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Meter.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Meter.java new file mode 100644 index 0000000..b27f023 --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Meter.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics; + +/** + * A metric which measure the rate at which some operation is invoked. + */ +public interface Meter extends Metric { + + /** + * Records one occurrence. + */ + void mark(); + + /** + * Records {@code events} occurrences. + * + * @param events Number of occurrences to record. + */ + void mark(long events); + +} + +// End Meter.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Metric.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Metric.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Metric.java new file mode 100644 index 0000000..fe133da --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Metric.java @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics; + +/** + * Parent interface for all metrics. + */ +public interface Metric { + +} + +// End Metric.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/MetricsSystem.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/MetricsSystem.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/MetricsSystem.java new file mode 100644 index 0000000..0d1cb4b --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/MetricsSystem.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics; + +/** + * General purpose factory for creating various metrics. Modeled off of the Dropwizard Metrics API. + */ +public interface MetricsSystem { + + /** + * Get or construct a {@link Timer} used to measure durations and report rates. + * + * @param name The name of the Timer. + * @return An instance of {@link Timer}. + */ + Timer getTimer(String name); + + /** + * Get or construct a {@link Histogram} used to measure a distribution of values. + * + * @param name The name of the Histogram. + * @return An instance of {@link Histogram}. + */ + Histogram getHistogram(String name); + + /** + * Get or construct a {@link Meter} used to measure durations and report distributions (a + * combination of a {@link Timer} and a {@link Histogram}. + * + * @param name The name of the Meter. + * @return An instance of {@link Meter}. + */ + Meter getMeter(String name); + + /** + * Get or construct a {@link Counter} used to track a mutable number. + * + * @param name The name of the Counter + * @return An instance of {@link Counter}. + */ + Counter getCounter(String name); + + /** + * Register a {@link Gauge}. The Gauge will be invoked at a period defined by the implementation + * of {@link MetricsSystem}. + * + * @param name The name of the Gauge. + * @param gauge A callback to compute the current value. + */ + <T> void register(String name, Gauge<T> gauge); + +} + +// End MetricsSystem.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/MetricsSystemConfiguration.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/MetricsSystemConfiguration.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/MetricsSystemConfiguration.java new file mode 100644 index 0000000..99b6e8c --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/MetricsSystemConfiguration.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics; + +/** + * A container used by a {@link MetricsSystemFactory} to create a {@link MetricsSystem}. + * + * @param <T> Configuration/State for the {@link MetricsSystem}. + */ +public interface MetricsSystemConfiguration<T> { + + /** + * @return Some state or configuration to create a {@link MetricsSystem}. + */ + T get(); + +} + +// End MetricsSystemConfiguration.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/MetricsSystemFactory.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/MetricsSystemFactory.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/MetricsSystemFactory.java new file mode 100644 index 0000000..484b230 --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/MetricsSystemFactory.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics; + +/** + * A factory class for creating instances of {@link MetricsSystem}. + */ +public interface MetricsSystemFactory { + + /** + * Creates an instance of a {@link MetricsSystem}. + * + * @return A new {@link MetricsSystem}. + */ + MetricsSystem create(MetricsSystemConfiguration<?> config); +} + +// End MetricsSystemFactory.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/MetricsSystemLoader.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/MetricsSystemLoader.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/MetricsSystemLoader.java new file mode 100644 index 0000000..3a15c5b --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/MetricsSystemLoader.java @@ -0,0 +1,87 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics; + +import org.apache.calcite.avatica.metrics.noop.NoopMetricsSystem; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.ServiceLoader; + +/** + * A utility encapsulating use of {@link ServiceLoader} to instantiate a {@link MetricsSystem}. + */ +public class MetricsSystemLoader { + private static final Logger LOG = LoggerFactory.getLogger(MetricsSystemLoader.class); + private static final MetricsSystemLoader INSTANCE = new MetricsSystemLoader(); + + private MetricsSystemLoader() {} + + /** + * Creates a {@link MetricsSystem} instance using the corresponding {@link MetricsSystemFactory} + * available to {@link ServiceLoader} on the classpath. If there is not exactly one instance of + * a {@link MetricsSystemFactory}, an instance of {@link NoopMetricsSystem} will be returned. + * + * @param config State to pass to the {@link MetricsSystemFactory}. + * @return A {@link MetricsSystem} implementation. + */ + public static MetricsSystem load(MetricsSystemConfiguration<?> config) { + return INSTANCE._load(Objects.requireNonNull(config)); + } + + MetricsSystem _load(MetricsSystemConfiguration<?> config) { + List<MetricsSystemFactory> availableFactories = getFactories(); + + if (1 == availableFactories.size()) { + // One and only one instance -- what we want/expect + MetricsSystemFactory factory = availableFactories.get(0); + LOG.info("Loaded MetricsSystem {}", factory.getClass()); + return factory.create(config); + } else if (availableFactories.isEmpty()) { + // None-provided default to no metrics + LOG.info("No metrics implementation available on classpath. Using No-op implementation"); + return NoopMetricsSystem.getInstance(); + } else { + // Tell the user they're doing something wrong, and choose the first impl. + StringBuilder sb = new StringBuilder(); + for (MetricsSystemFactory factory : availableFactories) { + if (sb.length() > 0) { + sb.append(", "); + } + sb.append(factory.getClass()); + } + LOG.warn("Found multiple MetricsSystemFactory implementations: {}." + + " Using No-op implementation", sb); + return NoopMetricsSystem.getInstance(); + } + } + + List<MetricsSystemFactory> getFactories() { + ServiceLoader<MetricsSystemFactory> loader = ServiceLoader.load(MetricsSystemFactory.class); + List<MetricsSystemFactory> availableFactories = new ArrayList<>(); + for (MetricsSystemFactory factory : loader) { + availableFactories.add(factory); + } + return availableFactories; + } +} + +// End MetricsSystemLoader.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/PackageMarker.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/PackageMarker.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/PackageMarker.java new file mode 100644 index 0000000..e627d31 --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/PackageMarker.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * This is a dummy annotation that forces javac to produce output for + * otherwise empty package-info.java. + * + * <p>The result is maven-compiler-plugin can properly identify the scope of + * changed files + * + * <p>See more details in + * <a href="https://jira.codehaus.org/browse/MCOMPILER-205"> + * maven-compiler-plugin: incremental compilation broken</a> + */ +@Retention(RetentionPolicy.SOURCE) +public @interface PackageMarker { +} + +// End PackageMarker.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Timer.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Timer.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Timer.java new file mode 100644 index 0000000..be792cc --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/Timer.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics; + +/** + * A metric which encompasses a {@link Histogram} and {@link Meter}. + */ +public interface Timer extends Metric { + + Context start(); + + /** + * A object that tracks an active timing state. + */ + public interface Context extends AutoCloseable { + /** + * Stops the timer. + */ + void close(); + } +} + +// End Timer.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopCounter.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopCounter.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopCounter.java new file mode 100644 index 0000000..9ce8476 --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopCounter.java @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics.noop; + +import org.apache.calcite.avatica.metrics.Counter; + +/** + * {@link Counter} implementation which does nothing. + */ +public class NoopCounter implements Counter { + + @Override public void increment() {} + + @Override public void increment(long n) {} + + @Override public void decrement() {} + + @Override public void decrement(long n) {} + +} + +// End NoopCounter.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopHistogram.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopHistogram.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopHistogram.java new file mode 100644 index 0000000..ee056e9 --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopHistogram.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics.noop; + +import org.apache.calcite.avatica.metrics.Histogram; + +/** + * {@link Histogram} which does nothing. + */ +public class NoopHistogram implements Histogram { + + @Override public void update(int value) {} + + @Override public void update(long value) {} + +} + +// End NoopHistogram.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopMeter.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopMeter.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopMeter.java new file mode 100644 index 0000000..4ad68c9 --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopMeter.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics.noop; + +import org.apache.calcite.avatica.metrics.Meter; + +/** + * {@link Meter} which does nothing. + */ +public class NoopMeter implements Meter { + + @Override public void mark() {} + + @Override public void mark(long events) {} + +} + +// End NoopMeter.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystem.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystem.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystem.java new file mode 100644 index 0000000..12b5af1 --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystem.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics.noop; + +import org.apache.calcite.avatica.metrics.Counter; +import org.apache.calcite.avatica.metrics.Gauge; +import org.apache.calcite.avatica.metrics.Histogram; +import org.apache.calcite.avatica.metrics.Meter; +import org.apache.calcite.avatica.metrics.Metric; +import org.apache.calcite.avatica.metrics.MetricsSystem; +import org.apache.calcite.avatica.metrics.Timer; + +/** + * {@link MetricsSystem} implementation which does nothing. Returns {@link Metric} implementations + * which also does nothing (avoiding null instances). + */ +public class NoopMetricsSystem implements MetricsSystem { + + private static final NoopMetricsSystem NOOP_METRICS = new NoopMetricsSystem(); + + private static final Timer TIMER = new NoopTimer(); + private static final Histogram HISTOGRAM = new NoopHistogram(); + private static final Meter METER = new NoopMeter(); + private static final Counter COUNTER = new NoopCounter(); + + /** + * @return A {@link NoopMetricsSystem} instance. + */ + public static NoopMetricsSystem getInstance() { + return NOOP_METRICS; + } + + private NoopMetricsSystem() {} + + @Override public Timer getTimer(String name) { + return TIMER; + } + + @Override public Histogram getHistogram(String name) { + return HISTOGRAM; + } + + @Override public Meter getMeter(String name) { + return METER; + } + + @Override public Counter getCounter(String name) { + return COUNTER; + } + + @Override public <T> void register(String name, Gauge<T> gauge) {} + +} + +// End NoopMetricsSystem.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystemConfiguration.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystemConfiguration.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystemConfiguration.java new file mode 100644 index 0000000..42b3f24 --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystemConfiguration.java @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics.noop; + +import org.apache.calcite.avatica.metrics.MetricsSystemConfiguration; + +/** + * An empty configuration for the {@link NoopMetricsSystem}. + */ +public class NoopMetricsSystemConfiguration implements MetricsSystemConfiguration<Void> { + + private static final NoopMetricsSystemConfiguration INSTANCE = + new NoopMetricsSystemConfiguration(); + + public static NoopMetricsSystemConfiguration getInstance() { + return INSTANCE; + } + + private NoopMetricsSystemConfiguration() {} + + @Override public Void get() { + return null; + } +} + +// End NoopMetricsSystemConfiguration.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystemFactory.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystemFactory.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystemFactory.java new file mode 100644 index 0000000..c15f978 --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystemFactory.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics.noop; + +import org.apache.calcite.avatica.metrics.MetricsSystemConfiguration; +import org.apache.calcite.avatica.metrics.MetricsSystemFactory; + +/** + * A {@link MetricsSystemFactory} for the {@link NoopMetricsSystem}. + * + * No service file is provided for this implementation. It is the fallback implementation if + * no implementation or more than one implementation is found on the classpath. + */ +public class NoopMetricsSystemFactory implements MetricsSystemFactory { + + @Override public NoopMetricsSystem create(MetricsSystemConfiguration<?> config) { + return NoopMetricsSystem.getInstance(); + } +} + +// End NoopMetricsSystemFactory.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopTimer.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopTimer.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopTimer.java new file mode 100644 index 0000000..a45cd63 --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/NoopTimer.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics.noop; + +import org.apache.calcite.avatica.metrics.Timer; +import org.apache.calcite.avatica.metrics.Timer.Context; + +/** + * {@link Timer} which does nothing. + */ +public class NoopTimer implements Timer { + + private static final NoopContext CONTEXT = new NoopContext(); + + @Override public NoopContext start() { + return CONTEXT; + } + + /** + * {@link Context} which does nothing. + */ + public static class NoopContext implements Context { + + @Override public void close() {} + + } +} + +// End NoopTimer.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/package-info.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/package-info.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/package-info.java new file mode 100644 index 0000000..826a655 --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/noop/package-info.java @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * No-operation implementation for the Avatica Metrics framework. + */ +@PackageMarker +package org.apache.calcite.avatica.metrics.noop; + +import org.apache.calcite.avatica.metrics.PackageMarker; + +// End package-info.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/package-info.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/package-info.java b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/package-info.java new file mode 100644 index 0000000..efed28c --- /dev/null +++ b/avatica/metrics/src/main/java/org/apache/calcite/avatica/metrics/package-info.java @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Metrics for the Avatica framework. + */ +@PackageMarker +package org.apache.calcite.avatica.metrics; + +// End package-info.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/test/java/org/apache/calcite/avatica/metrics/MetricsSystemLoaderTest.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/test/java/org/apache/calcite/avatica/metrics/MetricsSystemLoaderTest.java b/avatica/metrics/src/test/java/org/apache/calcite/avatica/metrics/MetricsSystemLoaderTest.java new file mode 100644 index 0000000..1c405ee --- /dev/null +++ b/avatica/metrics/src/test/java/org/apache/calcite/avatica/metrics/MetricsSystemLoaderTest.java @@ -0,0 +1,114 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics; + +import org.apache.calcite.avatica.metrics.noop.NoopMetricsSystem; +import org.apache.calcite.avatica.metrics.noop.NoopMetricsSystemConfiguration; + +import org.junit.Test; +import org.mockito.Mockito; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +/** + * Test class for {@link MetricsSystemLoader}. + */ +public class MetricsSystemLoaderTest { + + @Test public void testSingleInstance() { + final List<MetricsSystemFactory> factories = + Collections.<MetricsSystemFactory>singletonList(new MarkedNoopMetricsSystemFactory()); + MetricsSystemLoader loader = Mockito.mock(MetricsSystemLoader.class); + + Mockito.when(loader.getFactories()).thenReturn(factories); + Mockito.when(loader._load(Mockito.any(MetricsSystemConfiguration.class))).thenCallRealMethod(); + + // One MetricsSystemFactory should return the MetricsSystem it creates + MetricsSystem system = loader._load(NoopMetricsSystemConfiguration.getInstance()); + assertEquals(MarkedMetricsSystem.INSTANCE, system); + } + + @Test public void testMultipleInstances() { + // The type of the factories doesn't matter (we can send duplicates for testing purposes) + final List<MetricsSystemFactory> factories = + Arrays.<MetricsSystemFactory>asList(new MarkedNoopMetricsSystemFactory(), + new MarkedNoopMetricsSystemFactory()); + MetricsSystemLoader loader = Mockito.mock(MetricsSystemLoader.class); + + Mockito.when(loader.getFactories()).thenReturn(factories); + Mockito.when(loader._load(Mockito.any(MetricsSystemConfiguration.class))).thenCallRealMethod(); + + // We had two factories loaded, therefore we'll fall back to the NoopMetricsSystem + MetricsSystem system = loader._load(NoopMetricsSystemConfiguration.getInstance()); + assertEquals(NoopMetricsSystem.getInstance(), system); + } + + @Test public void testNoInstances() { + // The type of the factories doesn't matter (we can send duplicates for testing purposes) + final List<MetricsSystemFactory> factories = Collections.emptyList(); + MetricsSystemLoader loader = Mockito.mock(MetricsSystemLoader.class); + + Mockito.when(loader.getFactories()).thenReturn(factories); + Mockito.when(loader._load(Mockito.any(MetricsSystemConfiguration.class))).thenCallRealMethod(); + + // We had no factories loaded, therefore we'll fall back to the NoopMetricsSystem + MetricsSystem system = loader._load(NoopMetricsSystemConfiguration.getInstance()); + assertEquals(NoopMetricsSystem.getInstance(), system); + } + + /** + * A test factory implementation which can return a recognized MetricsSystem implementation. + */ + private static class MarkedNoopMetricsSystemFactory implements MetricsSystemFactory { + public MarkedMetricsSystem create(MetricsSystemConfiguration<?> config) { + return MarkedMetricsSystem.INSTANCE; + } + } + + /** + * A metrics system implementation that is identifiable for testing. + */ + private static class MarkedMetricsSystem implements MetricsSystem { + private static final MarkedMetricsSystem INSTANCE = new MarkedMetricsSystem(); + + private MarkedMetricsSystem() {} + + @Override public Timer getTimer(String name) { + return null; + } + + @Override public Histogram getHistogram(String name) { + return null; + } + + @Override public Meter getMeter(String name) { + return null; + } + + @Override public Counter getCounter(String name) { + return null; + } + + @Override public <T> void register(String name, Gauge<T> gauge) {} + } +} + +// End MetricsSystemLoaderTest.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/test/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystemFactoryTest.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/test/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystemFactoryTest.java b/avatica/metrics/src/test/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystemFactoryTest.java new file mode 100644 index 0000000..3060b2f --- /dev/null +++ b/avatica/metrics/src/test/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystemFactoryTest.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics.noop; + +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +/** + * Test class for {@link NoopMetricsSystemFactory}. + */ +public class NoopMetricsSystemFactoryTest { + + @Test public void testSingleton() { + NoopMetricsSystemFactory factory = new NoopMetricsSystemFactory(); + NoopMetricsSystemConfiguration config = NoopMetricsSystemConfiguration.getInstance(); + assertTrue("The factory should only return one NoopMetricsSystem instance", + factory.create(config) == factory.create(config)); + } + +} + +// End NoopMetricsSystemFactoryTest.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/test/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystemTest.java ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/test/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystemTest.java b/avatica/metrics/src/test/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystemTest.java new file mode 100644 index 0000000..f28d123 --- /dev/null +++ b/avatica/metrics/src/test/java/org/apache/calcite/avatica/metrics/noop/NoopMetricsSystemTest.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.avatica.metrics.noop; + +import org.apache.calcite.avatica.metrics.Counter; +import org.apache.calcite.avatica.metrics.Gauge; +import org.apache.calcite.avatica.metrics.Histogram; +import org.apache.calcite.avatica.metrics.Meter; +import org.apache.calcite.avatica.metrics.MetricsSystem; +import org.apache.calcite.avatica.metrics.Timer; +import org.apache.calcite.avatica.metrics.Timer.Context; + +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +/** + * Tests for {@link NoopMetricsSystem}. + */ +public class NoopMetricsSystemTest { + + @Test public void testNoNulls() { + // The NOOP implementation should act as a real implementation, no "nulls" allowed. + MetricsSystem metrics = NoopMetricsSystem.getInstance(); + + Counter counter = metrics.getCounter("counter"); + counter.decrement(); + counter.increment(); + counter.decrement(1L); + counter.increment(1L); + + Histogram histogram = metrics.getHistogram("histogram"); + histogram.update(1); + histogram.update(1L); + + Timer timer = metrics.getTimer("timer"); + Context context = timer.start(); + context.close(); + Context contextTwo = timer.start(); + assertTrue("Timer's context should be a singleton", context == contextTwo); + + Meter meter = metrics.getMeter("meter"); + meter.mark(); + meter.mark(5L); + + metrics.register("gauge", new Gauge<Long>() { + @Override public Long getValue() { + return 42L; + } + }); + } + + @Test public void testSingleton() { + assertTrue("Should be a singleton", + NoopMetricsSystem.getInstance() == NoopMetricsSystem.getInstance()); + } +} + +// End NoopMetricsSystemTest.java http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/metrics/src/test/resources/log4j.properties ---------------------------------------------------------------------- diff --git a/avatica/metrics/src/test/resources/log4j.properties b/avatica/metrics/src/test/resources/log4j.properties new file mode 100644 index 0000000..834e2db --- /dev/null +++ b/avatica/metrics/src/test/resources/log4j.properties @@ -0,0 +1,24 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to you under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Root logger is configured at INFO and is sent to A1 +log4j.rootLogger=INFO, A1 + +# A1 goes to the console +log4j.appender.A1=org.apache.log4j.ConsoleAppender + +# Set the pattern for each log message +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p - %m%n http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/noop-driver/pom.xml ---------------------------------------------------------------------- diff --git a/avatica/noop-driver/pom.xml b/avatica/noop-driver/pom.xml new file mode 100644 index 0000000..5c2326c --- /dev/null +++ b/avatica/noop-driver/pom.xml @@ -0,0 +1,110 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to you under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.calcite.avatica</groupId> + <artifactId>calcite-avatica-parent</artifactId> + <version>1.7.0-SNAPSHOT</version> + </parent> + + <artifactId>calcite-avatica-noop</artifactId> + <packaging>jar</packaging> + <name>Calcite Avatica Noop</name> + <description>A Noop JDBC driver.</description> + + <properties> + <top.dir>${project.basedir}/..</top.dir> + </properties> + + <build> + <pluginManagement> + <plugins> + <plugin> + <groupId>org.eclipse.m2e</groupId> + <artifactId>lifecycle-mapping</artifactId> + <version>1.0.0</version> + <configuration> + <lifecycleMappingMetadata> + <pluginExecutions> + <pluginExecution> + <pluginExecutionFilter> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-checkstyle-plugin</artifactId> + <versionRange>[2.12.1,)</versionRange> + <goals> + <goal>check</goal> + </goals> + </pluginExecutionFilter> + <action> + <ignore /> + </action> + </pluginExecution> + </pluginExecutions> + </lifecycleMappingMetadata> + </configuration> + </plugin> + </plugins> + </pluginManagement> + <plugins> + <!-- Parent module has the same plugin and does the work of + generating -sources.jar for each project. But without the + plugin declared here, IDEs don't know the sources are + available. --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-source-plugin</artifactId> + <executions> + <execution> + <id>attach-sources</id> + <phase>verify</phase> + <goals> + <goal>jar-no-fork</goal> + <goal>test-jar-no-fork</goal> + </goals> + </execution> + </executions> + </plugin> + + <!-- Produce a tests jar so that avatica-server/pom.xml can reference for suite. + TODO: remove after moving over to annotation-based TestSuite definitions. --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>test-jar</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <artifactId>maven-remote-resources-plugin</artifactId> + <executions> + <execution> + <id>non-root-resources</id> + <goals> + <goal>process</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project>
