Skip to content

Commit 924894b

Browse files
authored
Merge branch 'master' into helper-methods
2 parents 8a1334c + cf78d39 commit 924894b

File tree

7 files changed

+138
-19
lines changed

7 files changed

+138
-19
lines changed

src/main/java/com/yahoo/bullet/Config.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
@Slf4j
2424
public class Config implements Serializable {
2525
private Map<String, Object> data;
26+
public static final String DELIMITER = ".";
2627

2728
/**
2829
* Constructor that loads a specific file and loads the settings in that file.
@@ -86,6 +87,24 @@ public Map<String, Object> getAll(Optional<Set<String>> keys) {
8687
.collect(HashMap::new, (m, e) -> m.put(e.getKey(), e.getValue()), HashMap::putAll);
8788
}
8889

90+
/**
91+
* Get mappings for all keys with the specified prefix. If stripPrefix is set, the output keys do not contain the
92+
* prefix.
93+
*
94+
* @param keys an {@link Optional} {@link Set} of mapping names.
95+
* @param prefix The prefix that relevant keys must contain.
96+
* @param stripPrefix If true, the output keys do not contain the prefix.
97+
* @return mapping for keys (or all keys in data, if keys is empty) with the prefix.
98+
*/
99+
public Map<String, Object> getAllWithPrefix(Optional<Set<String>> keys, String prefix, boolean stripPrefix) {
100+
Set<String> inclusions = keys.orElse(data.keySet());
101+
int prefixLength = stripPrefix ? prefix.length() : 0;
102+
return this.data.entrySet().stream()
103+
.filter(e -> inclusions.contains(e.getKey()))
104+
.filter(e -> e.getKey().startsWith(prefix))
105+
.collect(HashMap::new, (m, e) -> m.put(e.getKey().substring(prefixLength), e.getValue()), HashMap::putAll);
106+
}
107+
89108
/**
90109
* Gets all mappings other than a set of keys. If no keys are specified, all mappings
91110
* are returned.

src/main/java/com/yahoo/bullet/pubsub/PubSubMessage.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,27 @@ public PubSubMessage(String id, String content, Metadata metadata, int sequence)
103103
public boolean hasContent() {
104104
return content != null;
105105
}
106+
107+
/**
108+
* Check if message has {@link Metadata}.
109+
*
110+
* @return true if message has Metadata.
111+
*/
112+
public boolean hasMetadata() {
113+
return metadata != null;
114+
}
115+
116+
@Override
117+
public int hashCode() {
118+
return (id + sequence).hashCode();
119+
}
120+
121+
@Override
122+
public boolean equals(Object other) {
123+
if (other == null || other.getClass() != PubSubMessage.class) {
124+
return false;
125+
}
126+
PubSubMessage otherMessage = (PubSubMessage) other;
127+
return id.equals(otherMessage.getId()) && sequence == otherMessage.getSequence();
128+
}
106129
}

src/main/resources/bullet_defaults.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,3 +180,9 @@ bullet.record.inject.timestamp.enable: true
180180
# This is the key that is used to add the timestamp in milliseconds to the record, if record.inject.timestamp.enable is true. This is the timestamp when
181181
# the record is projected. This is only applicable to RAW queries.
182182
bullet.record.inject.timestamp.key: "bullet_project_timestamp"
183+
184+
## PubSub default settings
185+
# This should point to a concrete implementation of PubSub.
186+
bullet.pubsub.class.name: "com.yahoo.bullet.pubsub.PubSub"
187+
# The current context. This can be QUERY_PROCESSING or QUERY_SUBMISSION. The PubSub implementation should use this to generate appropriate Publishers and Subscribers.
188+
bullet.pubsub.context.name: "QUERY_PROCESSING"

src/test/java/com/yahoo/bullet/BulletConfigTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,4 +118,32 @@ public void testMerging() throws IOException {
118118
Assert.assertEquals(config.get(BulletConfig.AGGREGATION_MAX_SIZE), 100L);
119119
Assert.assertEquals(config.get("pi"), 3.14);
120120
}
121+
122+
@Test
123+
public void testPropertiesWithPrefix() throws IOException {
124+
BulletConfig config = new BulletConfig("src/test/resources/test_config.yaml");
125+
String prefix = "bullet.pubsub";
126+
String fieldValue = "com.yahoo.bullet.pubsub.MockPubSub";
127+
128+
int configSize = config.getAllWithPrefix(Optional.empty(), prefix, false).size();
129+
Assert.assertEquals(configSize, 2);
130+
131+
Map<String, Object> properties = config.getAllWithPrefix(Optional.empty(), prefix, false);
132+
Assert.assertEquals(properties.get(BulletConfig.PUBSUB_CLASS_NAME), fieldValue);
133+
}
134+
135+
@Test
136+
public void testPropertiesStripPrefix() throws IOException {
137+
BulletConfig config = new BulletConfig("src/test/resources/test_config.yaml");
138+
String prefix = "bullet.pubsub.";
139+
String fieldName = "class.name";
140+
String fieldValue = "com.yahoo.bullet.pubsub.MockPubSub";
141+
142+
int configSize = config.getAllWithPrefix(Optional.empty(), prefix, true).size();
143+
Assert.assertEquals(configSize, 2);
144+
145+
Map<String, Object> properties = config.getAllWithPrefix(Optional.empty(), prefix, true);
146+
Assert.assertNull(properties.get(BulletConfig.PUBSUB_CLASS_NAME));
147+
Assert.assertEquals(properties.get(fieldName), fieldValue);
148+
}
121149
}

src/test/java/com/yahoo/bullet/pubsub/PubSubMessageTest.java

Lines changed: 61 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,36 +18,36 @@ private String getRandomString() {
1818

1919
@Test
2020
public void testNoMetadataCreation() {
21-
String messageId = getRandomString();
21+
String messageID = getRandomString();
2222
String messageContent = getRandomString();
2323

24-
PubSubMessage message = new PubSubMessage(messageId, messageContent);
25-
Assert.assertTrue(messageId.equals(message.getId()));
24+
PubSubMessage message = new PubSubMessage(messageID, messageContent);
25+
Assert.assertTrue(messageID.equals(message.getId()));
2626
Assert.assertEquals(message.getSequence(), -1);
2727
Assert.assertTrue(messageContent.equals(message.getContent()));
2828
Assert.assertNull(message.getMetadata());
2929
}
3030

3131
@Test
3232
public void testWithSequenceCreation() {
33-
String messageId = getRandomString();
33+
String messageID = getRandomString();
3434
String messageContent = getRandomString();
3535

36-
PubSubMessage message = new PubSubMessage(messageId, messageContent, 0);
37-
Assert.assertTrue(messageId.equals(message.getId()));
36+
PubSubMessage message = new PubSubMessage(messageID, messageContent, 0);
37+
Assert.assertTrue(messageID.equals(message.getId()));
3838
Assert.assertTrue(messageContent.equals(message.getContent()));
3939
Assert.assertEquals(message.getSequence(), 0);
4040
Assert.assertNull(message.getMetadata());
4141
}
4242

4343
@Test
4444
public void testWithSignalCreation() {
45-
String messageId = getRandomString();
45+
String messageID = getRandomString();
4646
String messageContent = getRandomString();
4747
Signal signal = Signal.ACKNOWLEDGE;
4848

49-
PubSubMessage message = new PubSubMessage(messageId, messageContent, signal, 0);
50-
Assert.assertTrue(messageId.equals(message.getId()));
49+
PubSubMessage message = new PubSubMessage(messageID, messageContent, signal, 0);
50+
Assert.assertTrue(messageID.equals(message.getId()));
5151
Assert.assertTrue(messageContent.equals(message.getContent()));
5252
Assert.assertEquals(message.getSequence(), 0);
5353
Assert.assertNotNull(message.getMetadata());
@@ -58,13 +58,13 @@ public void testWithSignalCreation() {
5858

5959
@Test
6060
public void testWithMetadataCreation() {
61-
String messageId = getRandomString();
61+
String messageID = getRandomString();
6262
String messageContent = getRandomString();
6363
String metadataContent = getRandomString();
6464
Signal signal = Signal.ACKNOWLEDGE;
6565
//Test creation without a sequence number.
66-
PubSubMessage message = new PubSubMessage(messageId, messageContent, new Metadata(signal, metadataContent));
67-
Assert.assertTrue(messageId.equals(message.getId()));
66+
PubSubMessage message = new PubSubMessage(messageID, messageContent, new Metadata(signal, metadataContent));
67+
Assert.assertTrue(messageID.equals(message.getId()));
6868
Assert.assertTrue(messageContent.equals(message.getContent()));
6969
Assert.assertEquals(message.getSequence(), -1);
7070
Assert.assertNotNull(message.getMetadata());
@@ -74,13 +74,13 @@ public void testWithMetadataCreation() {
7474

7575
@Test
7676
public void testWithMetadataAndSequenceCreation() {
77-
String messageId = getRandomString();
77+
String messageID = getRandomString();
7878
String messageContent = getRandomString();
7979
String metadataContent = getRandomString();
8080
Signal signal = Signal.ACKNOWLEDGE;
8181
//Test creation with a sequence number.
82-
PubSubMessage message = new PubSubMessage(messageId, messageContent, new Metadata(signal, metadataContent), 0);
83-
Assert.assertTrue(messageId.equals(message.getId()));
82+
PubSubMessage message = new PubSubMessage(messageID, messageContent, new Metadata(signal, metadataContent), 0);
83+
Assert.assertTrue(messageID.equals(message.getId()));
8484
Assert.assertTrue(messageContent.equals(message.getContent()));
8585
Assert.assertEquals(message.getSequence(), 0);
8686
Assert.assertNotNull(message.getMetadata());
@@ -90,19 +90,62 @@ public void testWithMetadataAndSequenceCreation() {
9090

9191
@Test
9292
public void testHasContent() {
93-
String messageId = getRandomString();
93+
String messageID = getRandomString();
9494
String messageContent = getRandomString();
9595

9696
PubSubMessage message;
97-
message = new PubSubMessage(messageId, messageContent);
97+
message = new PubSubMessage(messageID, messageContent);
9898
Assert.assertTrue(message.hasContent());
9999

100-
message = new PubSubMessage(messageId, null, Signal.COMPLETE);
100+
message = new PubSubMessage(messageID, null, Signal.COMPLETE);
101101
Assert.assertFalse(message.hasContent());
102102
}
103103

104104
@Test(expectedExceptions = NullPointerException.class)
105105
public void testNoIDIllegalCreation() {
106106
new PubSubMessage(null, "");
107107
}
108+
109+
@Test
110+
public void testEquals() {
111+
String messageID = getRandomString();
112+
String messageContent = getRandomString();
113+
Metadata randomMetadata = new Metadata(Signal.ACKNOWLEDGE, getRandomString());
114+
PubSubMessage message1 = new PubSubMessage(messageID, messageContent, randomMetadata);
115+
PubSubMessage message2 = new PubSubMessage(messageID, messageContent, new Metadata(Signal.ACKNOWLEDGE, getRandomString()));
116+
PubSubMessage message3 = new PubSubMessage(getRandomString(), messageContent, randomMetadata);
117+
PubSubMessage message4 = new PubSubMessage(messageID, messageContent, randomMetadata, 2);
118+
119+
Assert.assertEquals(message1, message2);
120+
Assert.assertNotEquals(message1, message3);
121+
Assert.assertNotEquals(message1, message4);
122+
Assert.assertFalse(message1.equals(null));
123+
Assert.assertFalse(message1.equals(new PubSubException("Dummy")));
124+
}
125+
126+
@Test
127+
public void testHashCode() {
128+
String messageID = getRandomString();
129+
String messageContent = getRandomString();
130+
Metadata randomMetadata = new Metadata(Signal.ACKNOWLEDGE, getRandomString());
131+
PubSubMessage message1 = new PubSubMessage(messageID, messageContent, randomMetadata);
132+
PubSubMessage message2 = new PubSubMessage(messageID, messageContent, new Metadata(Signal.ACKNOWLEDGE, getRandomString()));
133+
Assert.assertEquals(message1.hashCode(), message2.hashCode());
134+
}
135+
136+
@Test
137+
public void testHasMetadata() {
138+
String messageID = getRandomString();
139+
String messageContent = getRandomString();
140+
141+
PubSubMessage message;
142+
message = new PubSubMessage(messageID, messageContent);
143+
Assert.assertFalse(message.hasMetadata());
144+
145+
message = new PubSubMessage(messageID, null, Signal.COMPLETE);
146+
Assert.assertTrue(message.hasMetadata());
147+
148+
message = new PubSubMessage(messageID, null, new Metadata());
149+
Assert.assertTrue(message.hasMetadata());
150+
}
108151
}

src/test/java/com/yahoo/bullet/pubsub/PubSubTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public void testIllegalPubSubParameter() throws Exception {
3838
@Test(expectedExceptions = PubSubException.class)
3939
public void testIllegalPubSubClassName() throws Exception {
4040
BulletConfig config = new BulletConfig(null);
41+
config.set(BulletConfig.PUBSUB_CLASS_NAME, null);
4142
try {
4243
PubSub.from(config);
4344
} catch (Exception e) {

src/test/resources/test_config.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,5 @@ bullet.query.max.duration: 10000
22
bullet.query.aggregation.max.size: 100
33
# Some random fake setting
44
fake.setting: null
5-
65
bullet.pubsub.context.name: "QUERY_PROCESSING"
76
bullet.pubsub.class.name: "com.yahoo.bullet.pubsub.MockPubSub"

0 commit comments

Comments
 (0)