aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/src/main/java/io/opencensus/stats/ViewData.java6
-rw-r--r--api/src/main/java/io/opencensus/trace/Status.java5
-rw-r--r--api/src/main/java/io/opencensus/trace/export/SpanData.java8
-rw-r--r--contrib/zpages/src/main/java/io/opencensus/contrib/zpages/TraceConfigzZPageHandler.java14
-rw-r--r--exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtils.java13
-rw-r--r--exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorker.java8
-rw-r--r--exporters/trace/stackdriver/src/main/java/io/opencensus/exporter/trace/stackdriver/StackdriverV2ExporterHandler.java6
-rw-r--r--impl_core/src/main/java/io/opencensus/implcore/stats/IntervalBucket.java11
-rw-r--r--impl_core/src/main/java/io/opencensus/implcore/stats/MeasureToViewMap.java13
-rw-r--r--impl_core/src/main/java/io/opencensus/implcore/stats/MutableViewData.java30
10 files changed, 83 insertions, 31 deletions
diff --git a/api/src/main/java/io/opencensus/stats/ViewData.java b/api/src/main/java/io/opencensus/stats/ViewData.java
index dc8fd555..fe2510bc 100644
--- a/api/src/main/java/io/opencensus/stats/ViewData.java
+++ b/api/src/main/java/io/opencensus/stats/ViewData.java
@@ -44,6 +44,10 @@ import java.util.Map;
import java.util.Map.Entry;
import javax.annotation.concurrent.Immutable;
+/*>>>
+import org.checkerframework.checker.nullness.qual.Nullable;
+*/
+
/** The aggregated data for a particular {@link View}. */
@Immutable
@AutoValue
@@ -117,7 +121,7 @@ public abstract class ViewData {
return null;
}
},
- Functions.<Void>throwIllegalArgumentException());
+ Functions.</*@Nullable*/ Void>throwIllegalArgumentException());
}
private static String createErrorMessageForWindow(
diff --git a/api/src/main/java/io/opencensus/trace/Status.java b/api/src/main/java/io/opencensus/trace/Status.java
index d5807ef5..f5a275bf 100644
--- a/api/src/main/java/io/opencensus/trace/Status.java
+++ b/api/src/main/java/io/opencensus/trace/Status.java
@@ -28,6 +28,10 @@ import java.util.TreeMap;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
+/*>>>
+import org.checkerframework.dataflow.qual.Deterministic;
+*/
+
/**
* Defines the status of a {@link Span} by providing a standard {@link CanonicalCode} in conjunction
* with an optional descriptive message. Instances of {@code Status} are created by starting with
@@ -286,6 +290,7 @@ public final class Status {
* @return the description of this {@code Status}.
*/
@Nullable
+ /*@Deterministic*/
public String getDescription() {
return description;
}
diff --git a/api/src/main/java/io/opencensus/trace/export/SpanData.java b/api/src/main/java/io/opencensus/trace/export/SpanData.java
index c268d6b4..498c142e 100644
--- a/api/src/main/java/io/opencensus/trace/export/SpanData.java
+++ b/api/src/main/java/io/opencensus/trace/export/SpanData.java
@@ -36,6 +36,10 @@ import java.util.Map;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
+/*>>>
+import org.checkerframework.dataflow.qual.Deterministic;
+*/
+
/** Immutable representation of all data collected by the {@link Span} class. */
@Immutable
@AutoValue
@@ -106,6 +110,7 @@ public abstract class SpanData {
* @return the parent {@code SpanId} or {@code null} if the {@code Span} is a root {@code Span}.
*/
@Nullable
+ /*@Deterministic*/
public abstract SpanId getParentSpanId();
/**
@@ -177,6 +182,7 @@ public abstract class SpanData {
* @return the {@code Status} or {@code null} if {@code Span} is still active.
*/
@Nullable
+ /*@Deterministic*/
public abstract Status getStatus();
/**
@@ -185,6 +191,7 @@ public abstract class SpanData {
* @return the end {@code Timestamp} or {@code null} if the {@code Span} is still active.
*/
@Nullable
+ /*@Deterministic*/
public abstract Timestamp getEndTimestamp();
SpanData() {}
@@ -224,6 +231,7 @@ public abstract class SpanData {
*
* @return the event.
*/
+ /*@Deterministic*/
public abstract T getEvent();
TimedEvent() {}
diff --git a/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/TraceConfigzZPageHandler.java b/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/TraceConfigzZPageHandler.java
index 9b075b30..5257960d 100644
--- a/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/TraceConfigzZPageHandler.java
+++ b/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/TraceConfigzZPageHandler.java
@@ -16,8 +16,6 @@
package io.opencensus.contrib.zpages;
-import static com.google.common.base.Strings.isNullOrEmpty;
-
import com.google.common.base.Charsets;
import io.opencensus.trace.config.TraceConfig;
import io.opencensus.trace.config.TraceParams;
@@ -27,6 +25,11 @@ import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Map;
+import javax.annotation.Nullable;
+
+/*>>>
+import org.checkerframework.checker.nullness.qual.EnsuresNonNullIf;
+*/
// TODO(bdrutu): Add tests.
/**
@@ -167,6 +170,13 @@ final class TraceConfigzZPageHandler extends ZPageHandler {
}
}
+ // TODO(sebright): Try to use a Checker Framework stub file for the Guava Strings class and use
+ // Strings.isNullOrEmpty instead.
+ /*>>> @EnsuresNonNullIf(result = false, expression = "#1") */
+ private static boolean isNullOrEmpty(@Nullable String str) {
+ return str == null || str.isEmpty();
+ }
+
// Prints a table to a PrintWriter that shows existing trace parameters.
private static void emitTraceParamsTable(TraceParams params, PrintWriter out) {
out.write(
diff --git a/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtils.java b/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtils.java
index f90a520b..e3abe988 100644
--- a/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtils.java
+++ b/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtils.java
@@ -64,7 +64,10 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.logging.Level;
import java.util.logging.Logger;
-import javax.annotation.Nullable;
+
+/*>>>
+import org.checkerframework.checker.nullness.qual.Nullable;
+*/
/** Util methods to convert OpenCensus Stats data models to StackDriver monitoring data models. */
final class StackdriverExportUtils {
@@ -96,7 +99,7 @@ final class StackdriverExportUtils {
}
// Construct a MetricDescriptor using a View.
- @Nullable
+ @javax.annotation.Nullable
static MetricDescriptor createMetricDescriptor(View view, String projectId) {
if (!(view.getWindow() instanceof Cumulative)) {
// TODO(songya): Only Cumulative view will be exported to Stackdriver in this version.
@@ -170,7 +173,7 @@ final class StackdriverExportUtils {
// Convert ViewData to a list of TimeSeries, so that ViewData can be uploaded to Stackdriver.
static List<TimeSeries> createTimeSeriesList(
- ViewData viewData, MonitoredResource monitoredResource) {
+ @javax.annotation.Nullable ViewData viewData, MonitoredResource monitoredResource) {
List<TimeSeries> timeSeriesList = Lists.newArrayList();
if (viewData == null) {
return timeSeriesList;
@@ -252,7 +255,7 @@ final class StackdriverExportUtils {
throw new IllegalArgumentException("IntervalData not supported");
}
},
- Functions.<Void>throwIllegalArgumentException());
+ Functions.</*@Nullable*/ Void>throwIllegalArgumentException());
return builder.build();
}
@@ -303,7 +306,7 @@ final class StackdriverExportUtils {
return null;
}
},
- Functions.<Void>throwIllegalArgumentException());
+ Functions.</*@Nullable*/ Void>throwIllegalArgumentException());
return builder.build();
}
diff --git a/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorker.java b/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorker.java
index 80c78de5..24c0f0ed 100644
--- a/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorker.java
+++ b/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorker.java
@@ -43,6 +43,10 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.concurrent.NotThreadSafe;
+/*>>>
+import org.checkerframework.checker.nullness.qual.Nullable;
+*/
+
/**
* Worker {@code Runnable} that polls ViewData from Stats library and batch export to StackDriver.
*
@@ -151,7 +155,7 @@ final class StackdriverExporterWorker implements Runnable {
// StackDriver.
@VisibleForTesting
void export() {
- List<ViewData> viewDataList = Lists.newArrayList();
+ List</*@Nullable*/ ViewData> viewDataList = Lists.newArrayList();
for (View view : viewManager.getAllExportedViews()) {
if (registerView(view)) {
// Only upload stats for valid views.
@@ -160,7 +164,7 @@ final class StackdriverExporterWorker implements Runnable {
}
List<TimeSeries> timeSeriesList = Lists.newArrayList();
- for (ViewData viewData : viewDataList) {
+ for (/*@Nullable*/ ViewData viewData : viewDataList) {
timeSeriesList.addAll(
StackdriverExportUtils.createTimeSeriesList(viewData, monitoredResource));
}
diff --git a/exporters/trace/stackdriver/src/main/java/io/opencensus/exporter/trace/stackdriver/StackdriverV2ExporterHandler.java b/exporters/trace/stackdriver/src/main/java/io/opencensus/exporter/trace/stackdriver/StackdriverV2ExporterHandler.java
index d3ade520..3ff61bfe 100644
--- a/exporters/trace/stackdriver/src/main/java/io/opencensus/exporter/trace/stackdriver/StackdriverV2ExporterHandler.java
+++ b/exporters/trace/stackdriver/src/main/java/io/opencensus/exporter/trace/stackdriver/StackdriverV2ExporterHandler.java
@@ -58,6 +58,10 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
+/*>>>
+import org.checkerframework.checker.nullness.qual.Nullable;
+*/
+
/** Exporter to Stackdriver Trace API v2. */
final class StackdriverV2ExporterHandler extends SpanExporter.Handler {
private static final Tracer tracer = Tracing.getTracer();
@@ -252,7 +256,7 @@ final class StackdriverV2ExporterHandler extends SpanExporter.Handler {
return null;
}
},
- Functions.<Void>returnNull());
+ Functions.</*@Nullable*/ Void>returnNull());
return attributeValueBuilder.build();
}
diff --git a/impl_core/src/main/java/io/opencensus/implcore/stats/IntervalBucket.java b/impl_core/src/main/java/io/opencensus/implcore/stats/IntervalBucket.java
index 68380791..a35948a7 100644
--- a/impl_core/src/main/java/io/opencensus/implcore/stats/IntervalBucket.java
+++ b/impl_core/src/main/java/io/opencensus/implcore/stats/IntervalBucket.java
@@ -28,6 +28,10 @@ import io.opencensus.tags.TagValue;
import java.util.List;
import java.util.Map;
+/*>>>
+import org.checkerframework.checker.nullness.qual.Nullable;
+*/
+
/** The bucket with aggregated {@code MeasureValue}s used for {@code IntervalViewData}. */
final class IntervalBucket {
@@ -36,7 +40,8 @@ final class IntervalBucket {
private final Timestamp start;
private final Duration duration;
private final Aggregation aggregation;
- private final Map<List<TagValue>, MutableAggregation> tagValueAggregationMap = Maps.newHashMap();
+ private final Map<List</*@Nullable*/ TagValue>, MutableAggregation> tagValueAggregationMap =
+ Maps.newHashMap();
IntervalBucket(Timestamp start, Duration duration, Aggregation aggregation) {
checkNotNull(start, "Start");
@@ -48,7 +53,7 @@ final class IntervalBucket {
this.aggregation = aggregation;
}
- Map<List<TagValue>, MutableAggregation> getTagValueAggregationMap() {
+ Map<List</*@Nullable*/ TagValue>, MutableAggregation> getTagValueAggregationMap() {
return tagValueAggregationMap;
}
@@ -57,7 +62,7 @@ final class IntervalBucket {
}
// Puts a new value into the internal MutableAggregations, based on the TagValues.
- void record(List<TagValue> tagValues, double value) {
+ void record(List</*@Nullable*/ TagValue> tagValues, double value) {
if (!tagValueAggregationMap.containsKey(tagValues)) {
tagValueAggregationMap.put(tagValues, MutableViewData.createMutableAggregation(aggregation));
}
diff --git a/impl_core/src/main/java/io/opencensus/implcore/stats/MeasureToViewMap.java b/impl_core/src/main/java/io/opencensus/implcore/stats/MeasureToViewMap.java
index 4e55c741..64173713 100644
--- a/impl_core/src/main/java/io/opencensus/implcore/stats/MeasureToViewMap.java
+++ b/impl_core/src/main/java/io/opencensus/implcore/stats/MeasureToViewMap.java
@@ -40,9 +40,12 @@ import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
-import javax.annotation.Nullable;
import javax.annotation.concurrent.GuardedBy;
+/*>>>
+import org.checkerframework.checker.nullness.qual.Nullable;
+*/
+
/** A class that stores a singleton map from {@code MeasureName}s to {@link MutableViewData}s. */
final class MeasureToViewMap {
@@ -63,10 +66,10 @@ final class MeasureToViewMap {
// Cached set of exported views. It must be set to null whenever a view is registered or
// unregistered.
- @Nullable private volatile Set<View> exportedViews;
+ @javax.annotation.Nullable private volatile Set<View> exportedViews;
/** Returns a {@link ViewData} corresponding to the given {@link View.Name}. */
- @Nullable
+ @javax.annotation.Nullable
synchronized ViewData getView(View.Name viewName, Clock clock, StatsCollectionState state) {
MutableViewData view = getMutableViewData(viewName);
return view == null ? null : view.toViewData(clock.now(), state);
@@ -119,7 +122,7 @@ final class MeasureToViewMap {
mutableMap.put(view.getMeasure().getName(), MutableViewData.create(view, clock.now()));
}
- @Nullable
+ @javax.annotation.Nullable
private synchronized MutableViewData getMutableViewData(View.Name viewName) {
View view = registeredViews.get(viewName);
if (view == null) {
@@ -155,7 +158,7 @@ final class MeasureToViewMap {
measurement.match(
new RecordDoubleValueFunc(tags, view, timestamp),
new RecordLongValueFunc(tags, view, timestamp),
- Functions.<Void>throwAssertionError());
+ Functions.</*@Nullable*/ Void>throwAssertionError());
}
}
}
diff --git a/impl_core/src/main/java/io/opencensus/implcore/stats/MutableViewData.java b/impl_core/src/main/java/io/opencensus/implcore/stats/MutableViewData.java
index 7d251559..4963ce59 100644
--- a/impl_core/src/main/java/io/opencensus/implcore/stats/MutableViewData.java
+++ b/impl_core/src/main/java/io/opencensus/implcore/stats/MutableViewData.java
@@ -63,7 +63,10 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import javax.annotation.Nullable;
+
+/*>>>
+import org.checkerframework.checker.nullness.qual.Nullable;
+*/
/** A mutable version of {@link ViewData}, used for recording stats and start/end time. */
abstract class MutableViewData {
@@ -71,7 +74,7 @@ abstract class MutableViewData {
private static final long MILLIS_PER_SECOND = 1000L;
private static final long NANOS_PER_MILLI = 1000 * 1000;
- @Nullable @VisibleForTesting static final TagValue UNKNOWN_TAG_VALUE = null;
+ @javax.annotation.Nullable @VisibleForTesting static final TagValue UNKNOWN_TAG_VALUE = null;
@VisibleForTesting static final Timestamp ZERO_TIMESTAMP = Timestamp.create(0, 0);
@@ -134,9 +137,9 @@ abstract class MutableViewData {
}
@VisibleForTesting
- static List<TagValue> getTagValues(
+ static List</*@Nullable*/ TagValue> getTagValues(
Map<? extends TagKey, ? extends TagValue> tags, List<? extends TagKey> columns) {
- List<TagValue> tagValues = new ArrayList<TagValue>(columns.size());
+ List</*@Nullable*/ TagValue> tagValues = new ArrayList</*@Nullable*/ TagValue>(columns.size());
// Record all the measures in a "Greedy" way.
// Every view aggregates every measure. This is similar to doing a GROUPBY view’s keys.
for (int i = 0; i < columns.size(); ++i) {
@@ -202,7 +205,7 @@ abstract class MutableViewData {
private static final class CumulativeMutableViewData extends MutableViewData {
private Timestamp start;
- private final Map<List<TagValue>, MutableAggregation> tagValueAggregationMap =
+ private final Map<List</*@Nullable*/ TagValue>, MutableAggregation> tagValueAggregationMap =
Maps.newHashMap();
private CumulativeMutableViewData(View view, Timestamp start) {
@@ -212,7 +215,8 @@ abstract class MutableViewData {
@Override
void record(TagContext context, double value, Timestamp timestamp) {
- List<TagValue> tagValues = getTagValues(getTagMap(context), super.view.getColumns());
+ List</*@Nullable*/ TagValue> tagValues =
+ getTagValues(getTagMap(context), super.view.getColumns());
if (!tagValueAggregationMap.containsKey(tagValues)) {
tagValueAggregationMap.put(
tagValues, createMutableAggregation(super.view.getAggregation()));
@@ -305,7 +309,8 @@ abstract class MutableViewData {
@Override
void record(TagContext context, double value, Timestamp timestamp) {
- List<TagValue> tagValues = getTagValues(getTagMap(context), super.view.getColumns());
+ List</*@Nullable*/ TagValue> tagValues =
+ getTagValues(getTagMap(context), super.view.getColumns());
refreshBucketList(timestamp);
// It is always the last bucket that does the recording.
NullnessUtils.castNonNull(buckets.peekLast()).record(tagValues, value);
@@ -390,8 +395,9 @@ abstract class MutableViewData {
// Combine stats within each bucket, aggregate stats by tag values, and return the mapping from
// tag values to aggregation data.
- private Map<List<TagValue>, AggregationData> combineBucketsAndGetAggregationMap(Timestamp now) {
- Multimap<List<TagValue>, MutableAggregation> multimap = HashMultimap.create();
+ private Map<List</*@Nullable*/ TagValue>, AggregationData> combineBucketsAndGetAggregationMap(
+ Timestamp now) {
+ Multimap<List</*@Nullable*/ TagValue>, MutableAggregation> multimap = HashMultimap.create();
// TODO(sebright): Decide whether to use a different class instead of LinkedList.
@SuppressWarnings("JdkObsolete")
@@ -399,7 +405,7 @@ abstract class MutableViewData {
Aggregation aggregation = super.view.getAggregation();
putBucketsIntoMultiMap(shallowCopy, multimap, aggregation, now);
- Map<List<TagValue>, MutableAggregation> singleMap =
+ Map<List</*@Nullable*/ TagValue>, MutableAggregation> singleMap =
aggregateOnEachTagValueList(multimap, aggregation);
return createAggregationMap(singleMap, super.getView().getMeasure());
}
@@ -408,7 +414,7 @@ abstract class MutableViewData {
// mutable aggregations (map value) from different buckets.
private static void putBucketsIntoMultiMap(
LinkedList<IntervalBucket> buckets,
- Multimap<List<TagValue>, MutableAggregation> multimap,
+ Multimap<List</*@Nullable*/ TagValue>, MutableAggregation> multimap,
Aggregation aggregation,
Timestamp now) {
// Put fractional stats of the head (oldest) bucket.
@@ -430,7 +436,7 @@ abstract class MutableViewData {
shouldSkipFirst = false;
continue; // skip the first bucket
}
- for (Entry<List<TagValue>, MutableAggregation> entry :
+ for (Entry<List</*@Nullable*/ TagValue>, MutableAggregation> entry :
bucket.getTagValueAggregationMap().entrySet()) {
multimap.put(entry.getKey(), entry.getValue());
}