-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added a ColumnFamilyChooser to choose the column family a event shoul…
…d write to
- Loading branch information
dcapwell
committed
Jan 19, 2013
1 parent
6b970ab
commit acb5ac6
Showing
8 changed files
with
163 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
21 changes: 21 additions & 0 deletions
21
src/main/java/org/apache/flume/cassandra/ColumnFamilyChooser.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,21 @@ | |||
package org.apache.flume.cassandra; | |||
|
|||
import com.netflix.astyanax.model.ColumnFamily; | |||
import org.apache.flume.Event; | |||
import org.apache.flume.conf.Configurable; | |||
|
|||
import javax.annotation.Nonnull; | |||
|
|||
/** | |||
* Choose a {@link ColumnFamily} to send a given event to. | |||
*/ | |||
public interface ColumnFamilyChooser extends Configurable { | |||
|
|||
/** | |||
* Choose a {@link ColumnFamily} to send the given event to. This method will be called for every event. | |||
* | |||
* @param event to index | |||
* @return column family the event should be sent to | |||
*/ | |||
ColumnFamily<byte[], String> choose(@Nonnull Event event); | |||
} |
34 changes: 34 additions & 0 deletions
34
src/main/java/org/apache/flume/cassandra/DefaultColumnFamilyChooser.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,34 @@ | |||
package org.apache.flume.cassandra; | |||
|
|||
import com.netflix.astyanax.model.ColumnFamily; | |||
import com.netflix.astyanax.serializers.BytesArraySerializer; | |||
import com.netflix.astyanax.serializers.StringSerializer; | |||
import org.apache.flume.Context; | |||
import org.apache.flume.Event; | |||
|
|||
import javax.annotation.Nonnull; | |||
|
|||
/** | |||
* {@link #choose(org.apache.flume.Event)} returns the {@link ColumnFamily} defined in the {@link Context}. | |||
*/ | |||
public class DefaultColumnFamilyChooser implements ColumnFamilyChooser { | |||
/** | |||
* Used by {@link #configure(org.apache.flume.Context)} to look up the column name to use. This is the key in | |||
* the {@link Context}. Defaults to "events". | |||
*/ | |||
public static final String COLUMN_NAME = "column_name"; | |||
|
|||
private ColumnFamily<byte[], String> columnFamily; | |||
|
|||
@Override | |||
public ColumnFamily<byte[], String> choose(@Nonnull final Event event) { | |||
return columnFamily; | |||
} | |||
|
|||
@Override | |||
public void configure(final Context context) { | |||
final String column_name = context.getString(COLUMN_NAME, "events"); | |||
this.columnFamily = new ColumnFamily<byte[], String>(column_name, | |||
BytesArraySerializer.get(), StringSerializer.get()); | |||
} | |||
} |
51 changes: 51 additions & 0 deletions
51
src/test/java/org/apache/flume/cassandra/AbstractCassandraSinkTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,51 @@ | |||
package org.apache.flume.cassandra; | |||
|
|||
import com.netflix.astyanax.model.ColumnFamily; | |||
import org.apache.flume.Context; | |||
import org.apache.flume.EventDeliveryException; | |||
import org.testng.Assert; | |||
import org.testng.annotations.Test; | |||
|
|||
@Test | |||
public class AbstractCassandraSinkTest { | |||
|
|||
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "seeds must be defined in context") | |||
public void testConfigureEmptyContext() throws Exception { | |||
AbstractCassandraSink sink = new NoOpCassandraSink(); | |||
Context context = new Context(); | |||
|
|||
sink.configure(context); | |||
} | |||
|
|||
public void testConfigure() throws Exception { | |||
NoOpCassandraSink sink = new NoOpCassandraSink(); | |||
Context context = new Context(); | |||
context.put("seeds", "localhost"); | |||
sink.configure(context); | |||
|
|||
Assert.assertEquals(sink.getChooser().getClass(), DefaultColumnFamilyChooser.class); | |||
|
|||
ColumnFamily<byte[], String> columnFamily = sink.getChooser().choose(null); | |||
Assert.assertEquals(columnFamily.getName(), "events"); | |||
} | |||
|
|||
/** | |||
* Used to test {@link #configure(org.apache.flume.Context)}. | |||
*/ | |||
private static class NoOpCassandraSink extends AbstractCassandraSink { | |||
|
|||
@Override | |||
protected String getConfigName() { | |||
return null; // this method isn't used anymore | |||
} | |||
|
|||
@Override | |||
public Status process() throws EventDeliveryException { | |||
return null; // no-op | |||
} | |||
|
|||
public ColumnFamilyChooser getChooser() { | |||
return chooser; | |||
} | |||
} | |||
} |
29 changes: 29 additions & 0 deletions
29
src/test/java/org/apache/flume/cassandra/DefaultColumnFamilyChooserTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,29 @@ | |||
package org.apache.flume.cassandra; | |||
|
|||
import com.netflix.astyanax.model.ColumnFamily; | |||
import org.apache.flume.Context; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.testng.Assert; | |||
import org.testng.annotations.Test; | |||
|
|||
@Test | |||
public class DefaultColumnFamilyChooserTest { | |||
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultColumnFamilyChooserTest.class.getName()); | |||
|
|||
public void testConfigure() throws Exception { | |||
ColumnFamilyChooser chooser = new DefaultColumnFamilyChooser(); | |||
Context context = new Context(); | |||
context.put(DefaultColumnFamilyChooser.COLUMN_NAME, "testConfigure"); | |||
chooser.configure(context); | |||
|
|||
ColumnFamily<byte[], String> cf = chooser.choose(null); | |||
Assert.assertEquals(cf.getName(), "testConfigure"); | |||
|
|||
context.put(DefaultColumnFamilyChooser.COLUMN_NAME, "testConfigure-v2"); | |||
chooser.configure(context); | |||
|
|||
cf = chooser.choose(null); | |||
Assert.assertEquals(cf.getName(), "testConfigure-v2"); | |||
} | |||
} |