Skip to content

Commit

Permalink
Add new listTables operation with more detailed response (fixes #361) (
Browse files Browse the repository at this point in the history
  • Loading branch information
olim7t authored Aug 24, 2023
1 parent 4d2a772 commit 5506d26
Show file tree
Hide file tree
Showing 31 changed files with 553 additions and 21 deletions.
13 changes: 13 additions & 0 deletions management-api-agent-3.x/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,19 @@
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.k8ssandra</groupId>
<artifactId>datastax-mgmtapi-agent-common</artifactId>
<version>${project.version}</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
</dependencies>
</profile>
</profiles>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public ObjectSerializer3x(Class<T> clazz, Type genericType) {
field -> field.getName(),
field ->
new FieldSerializer(
GenericSerializer3x.getType(field.getType()), field))));
GenericSerializer3x.getType(field.getGenericType()), field))));
// currently not recursive; multiple ways to do it
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/*
* Copyright DataStax, Inc.
*
* Please see the included license file for details.
*/
package com.datastax.mgmtapi.rpc;

import static org.assertj.core.api.Assertions.assertThat;

public class ObjectSerializer3xTest extends ObjectSerializerTestBase<ObjectSerializer3x<Example>> {

@Override
protected ObjectSerializer3x<Example> createExampleSerializer() {
return new ObjectSerializer3x<>(Example.class);
}

@Override
protected String getCqlType(ObjectSerializer3x<Example> serializer, String fieldName) {
assertThat(serializer.serializers).containsKey(fieldName);
return serializer.serializers.get(fieldName).type.toString();
}
}
13 changes: 13 additions & 0 deletions management-api-agent-4.1.x/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,19 @@
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.k8ssandra</groupId>
<artifactId>datastax-mgmtapi-agent-common</artifactId>
<version>${project.version}</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
</dependencies>
<profiles>
<profile>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public ObjectSerializer41x(Class<T> clazz, Type genericType) {
field -> field.getName(),
field ->
new FieldSerializer(
GenericSerializer41x.getType(field.getType()), field))));
GenericSerializer41x.getType(field.getGenericType()), field))));
// currently not recursive; multiple ways to do it
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* Copyright DataStax, Inc.
*
* Please see the included license file for details.
*/
package com.datastax.mgmtapi.rpc;

import static org.assertj.core.api.Assertions.assertThat;

public class ObjectSerializer41xTest
extends ObjectSerializerTestBase<ObjectSerializer41x<Example>> {

@Override
protected ObjectSerializer41x<Example> createExampleSerializer() {
return new ObjectSerializer41x<>(Example.class);
}

@Override
protected String getCqlType(ObjectSerializer41x<Example> serializer, String fieldName) {
assertThat(serializer.serializers).containsKey(fieldName);
return serializer.serializers.get(fieldName).type.toString();
}
}
13 changes: 13 additions & 0 deletions management-api-agent-4.x/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,19 @@
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.k8ssandra</groupId>
<artifactId>datastax-mgmtapi-agent-common</artifactId>
<version>${project.version}</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
</dependencies>
<profiles>
<profile>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public ObjectSerializer4x(Class<T> clazz, Type genericType) {
field -> field.getName(),
field ->
new FieldSerializer(
GenericSerializer4x.getType(field.getType()), field))));
GenericSerializer4x.getType(field.getGenericType()), field))));
// currently not recursive; multiple ways to do it
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/*
* Copyright DataStax, Inc.
*
* Please see the included license file for details.
*/
package com.datastax.mgmtapi.rpc;

import static org.assertj.core.api.Assertions.assertThat;

public class ObjectSerializer4xTest extends ObjectSerializerTestBase<ObjectSerializer4x<Example>> {

@Override
protected ObjectSerializer4x<Example> createExampleSerializer() {
return new ObjectSerializer4x<>(Example.class);
}

@Override
protected String getCqlType(ObjectSerializer4x<Example> serializer, String fieldName) {
assertThat(serializer.serializers).containsKey(fieldName);
return serializer.serializers.get(fieldName).type.toString();
}
}
13 changes: 13 additions & 0 deletions management-api-agent-5.0.x/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,19 @@
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.k8ssandra</groupId>
<artifactId>datastax-mgmtapi-agent-common</artifactId>
<version>${project.version}</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
</dependencies>
<profiles>
<profile>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public ObjectSerializer50x(Class<T> clazz, Type genericType) {
field -> field.getName(),
field ->
new FieldSerializer(
GenericSerializer50x.getType(field.getType()), field))));
GenericSerializer50x.getType(field.getGenericType()), field))));
// currently not recursive; multiple ways to do it
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* Copyright DataStax, Inc.
*
* Please see the included license file for details.
*/
package com.datastax.mgmtapi.rpc;

import static org.assertj.core.api.Assertions.assertThat;

public class ObjectSerializer50xTest
extends ObjectSerializerTestBase<ObjectSerializer50x<Example>> {

@Override
protected ObjectSerializer50x<Example> createExampleSerializer() {
return new ObjectSerializer50x<>(Example.class);
}

@Override
protected String getCqlType(ObjectSerializer50x<Example> serializer, String fieldName) {
assertThat(serializer.serializers).containsKey(fieldName);
return serializer.serializers.get(fieldName).type.toString();
}
}
18 changes: 18 additions & 0 deletions management-api-agent-common/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,12 @@
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
Expand Down Expand Up @@ -177,6 +183,18 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -536,17 +536,18 @@ public Map<String, String> getReplication(@RpcParam(name = "keyspaceName") Strin
return rows.one().getMap("replication", UTF8Type.instance, UTF8Type.instance);
}

@Rpc(name = "getTables")
public List<String> getTables(@RpcParam(name = "keyspaceName") String keyspaceName) {
@Rpc(name = "getTables", multiRow = true)
public List<Table> getTables(@RpcParam(name = "keyspaceName") String keyspaceName) {
String query =
QueryBuilder.selectFrom("system_schema", "tables")
.column("table_name")
.column("compaction")
.where(Relation.column("keyspace_name").isEqualTo(QueryBuilder.literal(keyspaceName)))
.asCql();
UntypedResultSet rows = ShimLoader.instance.get().processQuery(query, ConsistencyLevel.ONE);
List<String> tables = new ArrayList<>();
List<Table> tables = new ArrayList<>();
for (UntypedResultSet.Row row : rows) {
tables.add(row.getString("table_name"));
tables.add(new Table(row.getString("table_name"), row.getFrozenTextMap("compaction")));
}
return tables;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* Copyright DataStax, Inc.
*
* Please see the included license file for details.
*/
package com.datastax.mgmtapi;

import java.util.Map;

public class Table {
public final String name;
public final Map<String, String> compaction;

public Table(String name, Map<String, String> compaction) {
this.name = name;
this.compaction = compaction;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/*
* Copyright DataStax, Inc.
*
* Please see the included license file for details.
*/
package com.datastax.mgmtapi.rpc;

import java.util.List;
import java.util.Map;

/** Example class used for serializer tests. */
@SuppressWarnings("unused")
public class Example {
public String stringField;
public Map<String, String> mapField;
public List<List<Integer>> listField;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* Copyright DataStax, Inc.
*
* Please see the included license file for details.
*/
package com.datastax.mgmtapi.rpc;

import static org.assertj.core.api.Assertions.assertThat;

import org.junit.Test;

/** A template for ObjectSerializer tests in implementation modules. */
public abstract class ObjectSerializerTestBase<S extends ObjectSerializer<Example>> {

/** Create a concrete serializer for the {@link Example} class. */
protected abstract S createExampleSerializer();

/** Return the CQL type that the serializer inferred for a particular field. */
protected abstract String getCqlType(S serializer, String fieldName);

@Test
public void testFieldTypes() {
S exampleSerializer = createExampleSerializer();

expectType(exampleSerializer, "stringField", "org.apache.cassandra.db.marshal.UTF8Type");
expectType(
exampleSerializer,
"mapField",
"org.apache.cassandra.db.marshal.FrozenType("
+ "org.apache.cassandra.db.marshal.MapType("
+ "org.apache.cassandra.db.marshal.UTF8Type,"
+ "org.apache.cassandra.db.marshal.UTF8Type))");
expectType(
exampleSerializer,
"listField",
"org.apache.cassandra.db.marshal.FrozenType("
+ "org.apache.cassandra.db.marshal.ListType("
+ "org.apache.cassandra.db.marshal.ListType("
+ "org.apache.cassandra.db.marshal.Int32Type)))");
}

private void expectType(S exampleSerializer, String fieldName, String expectedType) {
String actualType = getCqlType(exampleSerializer, fieldName);
assertThat(actualType).isEqualTo(expectedType);
}
}
13 changes: 13 additions & 0 deletions management-api-agent-dse-6.8/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,19 @@
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.k8ssandra</groupId>
<artifactId>datastax-mgmtapi-agent-common</artifactId>
<version>${project.version}</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<resources>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,8 @@ public ObjectSerializerDse68(Class<T> clazz, Type genericType) {
field -> field.getName(),
field ->
new FieldSerializer(
GenericSerializerDse68.getType(field.getType()), field))));
GenericSerializerDse68.getType(field.getGenericType()),
field))));
// currently not recursive; multiple ways to do it
}

Expand Down
Loading

0 comments on commit 5506d26

Please sign in to comment.