Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 58 additions & 10 deletions api/src/main/java/io/opentelemetry/api/baggage/Entry.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,13 @@

package io.opentelemetry.api.baggage;

import com.google.auto.value.AutoValue;
import io.opentelemetry.api.internal.StringUtils;
import io.opentelemetry.api.internal.Utils;
import javax.annotation.concurrent.Immutable;

/** String-String key-value pair, along with {@link EntryMetadata}. */
@Immutable
@AutoValue
public abstract class Entry {

Entry() {}
public final class Entry {

/**
* Creates an {@code Entry} from the given key, value and metadata.
Expand All @@ -28,7 +24,7 @@ public abstract class Entry {
public static Entry create(String key, String value, EntryMetadata entryMetadata) {
Utils.checkArgument(keyIsValid(key), "Invalid entry key name: %s", key);
Utils.checkArgument(isValueValid(value), "Invalid entry value: %s", value);
return new AutoValue_Entry(key, value, entryMetadata);
return new Entry(key, value, entryMetadata);
}

/**
Expand All @@ -39,29 +35,81 @@ public static Entry create(String key, String value, EntryMetadata entryMetadata
* @return a {@code Entry}.
*/
public static Entry create(String key, String value) {
return create(key, value, EntryMetadata.EMPTY);
return create(key, value, EntryMetadata.empty());
}

private final String key;
private final String value;
private final EntryMetadata entryMetadata;

private Entry(String key, String value, EntryMetadata entryMetadata) {
this.key = key;
this.value = value;
this.entryMetadata = entryMetadata;
}

/**
* Returns the entry's key.
*
* @return the entry's key.
*/
public abstract String getKey();
public String getKey() {
return key;
}

/**
* Returns the entry's value.
*
* @return the entry's value.
*/
public abstract String getValue();
public String getValue() {
return value;
}

/**
* Returns the (optional) {@link EntryMetadata} associated with this {@link Entry}.
*
* @return the {@code EntryMetadata}.
*/
public abstract EntryMetadata getEntryMetadata();
public EntryMetadata getEntryMetadata() {
return entryMetadata;
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof Entry)) {
return false;
}
Entry entry = (Entry) o;
return key.equals(entry.key)
&& value.equals(entry.value)
&& entryMetadata.equals(entry.entryMetadata);
}

@Override
public int hashCode() {
int result = key.hashCode();
result = 31 * result + value.hashCode();
result = 31 * result + entryMetadata.hashCode();
return result;
}

@Override
public String toString() {
return "Entry{"
+ "key='"
+ key
+ '\''
+ ", value='"
+ value
+ '\''
+ ", entryMetadata="
+ entryMetadata
+ '}';
}

/**
* Determines whether the given {@code String} is a valid entry key.
Expand Down
55 changes: 42 additions & 13 deletions api/src/main/java/io/opentelemetry/api/baggage/EntryMetadata.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,34 +5,63 @@

package io.opentelemetry.api.baggage;

import com.google.auto.value.AutoValue;
import javax.annotation.concurrent.Immutable;

/**
* {@link EntryMetadata} contains properties associated with an {@link Entry}. This is an opaque
* wrapper for a String metadata value.
*/
@Immutable
@AutoValue
public abstract class EntryMetadata {
public static final EntryMetadata EMPTY = create("");
public final class EntryMetadata {
private static final EntryMetadata EMPTY = create("");

EntryMetadata() {}
/** Returns an {@link EntryMetadata} with no value. */
public static EntryMetadata empty() {
return EMPTY;
}

/**
* Creates an {@link EntryMetadata} with the given value.
*
* @param metadata TTL of an {@code Entry}.
* @return an {@code EntryMetadata}.
*/
/** Returns an {@link EntryMetadata} with the given value. */
public static EntryMetadata create(String metadata) {
return new AutoValue_EntryMetadata(metadata);
if (metadata == null) {
return empty();
}
return new EntryMetadata(metadata);
}

private final String metadata;

private EntryMetadata(String metadata) {
this.metadata = metadata;
}

/**
* Returns the String value of this {@link EntryMetadata}.
*
* @return the raw metadata value.
*/
public abstract String getValue();
public String getValue() {
return metadata;
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof EntryMetadata)) {
return false;
}
EntryMetadata that = (EntryMetadata) o;
return metadata.equals(that.metadata);
}

@Override
public int hashCode() {
return metadata.hashCode();
}

@Override
public String toString() {
return "'" + metadata + "'";
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed this a bit, I think the previous autovalue implementation would have been EntryMetadata{metadata=foo}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the old version was a bit better. Any time we make a toString() look too usable by an end-user for something other than debugging, I think we open ourselves up to people mis-using it, which would lock us into a particular implementation.

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ public Baggage.Builder put(String key, String value, EntryMetadata entryMetadata
public Baggage.Builder put(String key, String value) {
entries.put(
Objects.requireNonNull(key, "key"),
Entry.create(key, Objects.requireNonNull(value, "value"), EntryMetadata.EMPTY));
Entry.create(key, Objects.requireNonNull(value, "value"), EntryMetadata.empty()));
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,9 @@ void testEquals() {
.addEqualityGroup(EntryMetadata.create("other value"))
.testEquals();
}

@Test
void nullValue() {
assertThat(EntryMetadata.create(null)).isEqualTo(EntryMetadata.empty());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ void extract_fullComplexities() {
Baggage expectedBaggage =
Baggage.builder()
.put("key1", "value1", EntryMetadata.create("metadata-key = value; othermetadata"))
.put("key2", "value2", EntryMetadata.EMPTY)
.put("key2", "value2", EntryMetadata.empty())
.put("key3", "value3")
.build();
assertThat(Baggage.fromContext(result)).isEqualTo(expectedBaggage);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ SpanContextShim newWithKeyValue(String key, String value) {
Context parentContext = Context.current().with(baggage);

Baggage.Builder builder = Baggage.builder().setParent(parentContext);
builder.put(key, value, EntryMetadata.EMPTY);
builder.put(key, value, EntryMetadata.empty());

return new SpanContextShim(telemetryInfo(), context, builder.build());
}
Expand Down