Skip to content

Commit

Permalink
Merge pull request #288 from weaviate/add-support-for-async-replication
Browse files Browse the repository at this point in the history
Add support for asyncEnabled replication setting
  • Loading branch information
antas-marcin authored Jul 17, 2024
2 parents 340f6a4 + 01c3930 commit 05db887
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,6 @@
@EqualsAndHashCode
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
public class ReplicationConfig {
Boolean asyncEnabled;
Integer factor;
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,63 +45,22 @@ public void after() {

@Test
public void shouldCreateClassWithImplicitReplicationFactor() {
// given
int replicationFactor = 1;

String className = "Band";
WeaviateClass clazz = WeaviateClass.builder()
.className(className)
.description("Band that plays and produces music")
.vectorIndexType("hnsw")
.vectorizer("text2vec-contextionary")
.build();

// when
Result<Boolean> createStatus = client1.schema().classCreator().withClass(clazz).run();
assertThat(createStatus).isNotNull()
.returns(false, Result::hasErrors)
.returns(true, Result::getResult);

// then
Result<WeaviateClass> classResult = client1.schema().classGetter().withClassName(className).run();
assertThat(classResult).isNotNull()
.returns(false, Result::hasErrors)
.extracting(Result::getResult).isNotNull()
.extracting(WeaviateClass::getReplicationConfig)
.isNotNull()
.extracting(ReplicationConfig::getFactor)
.isEqualTo(replicationFactor);
assertClassReplicationSettings(1, null);
}

@Test
public void shouldCreateClassWithExplicitReplicationFactor() {
// given
int replicationFactor = 2;

String className = "Band";
WeaviateClass clazz = WeaviateClass.builder()
.className(className)
.description("Band that plays and produces music")
.vectorIndexType("hnsw")
.vectorizer("text2vec-contextionary")
.replicationConfig(ReplicationConfig.builder().factor(replicationFactor).build())
.build();
assertClassReplicationSettings(2, null);
}

// when
Result<Boolean> createStatus = client1.schema().classCreator().withClass(clazz).run();
assertThat(createStatus).isNotNull()
.returns(false, Result::hasErrors)
.returns(true, Result::getResult);
@Test
public void shouldCreateClassWithExplicitAsyncReplicationWithImplicitReplicationFactor() {
assertClassReplicationSettings(1, false);
}

// then
Result<WeaviateClass> classResult = client1.schema().classGetter().withClassName(className).run();
assertThat(classResult).isNotNull()
.returns(false, Result::hasErrors)
.extracting(Result::getResult).isNotNull()
.extracting(WeaviateClass::getReplicationConfig)
.isNotNull()
.extracting(ReplicationConfig::getFactor)
.isEqualTo(replicationFactor);
@Test
public void shouldCreateClassWithExplicitAsyncReplicationAndExplicitReplicationFactor() {
assertClassReplicationSettings(2, true);
}

@Test
Expand Down Expand Up @@ -494,4 +453,42 @@ public void shouldBatchObjectsWithNestedProperties_NoSchema2() {
schemaClass = utils.getClass(client2, className);
utils.assertThatSchemaPropertiesHaveDataTypes(expectedProps, schemaClass);
}

private void assertClassReplicationSettings(int replicationFactor, Boolean asyncEnabled) {
// given
ReplicationConfig.ReplicationConfigBuilder replicationConfigBuilder = ReplicationConfig.builder().factor(replicationFactor);
if (asyncEnabled != null) {
replicationConfigBuilder = replicationConfigBuilder.asyncEnabled(asyncEnabled);
}
String className = "Band";
WeaviateClass clazz = WeaviateClass.builder()
.className(className)
.description("Band that plays and produces music")
.vectorIndexType("hnsw")
.vectorizer("text2vec-contextionary")
.replicationConfig(replicationConfigBuilder.build())
.build();

// when
Result<Boolean> createStatus = client1.schema().classCreator().withClass(clazz).run();
assertThat(createStatus).isNotNull()
.returns(false, Result::hasErrors)
.returns(true, Result::getResult);

// then
Result<WeaviateClass> classResult = client1.schema().classGetter().withClassName(className).run();
assertThat(classResult).isNotNull()
.returns(false, Result::hasErrors)
.extracting(Result::getResult).isNotNull()
.extracting(WeaviateClass::getReplicationConfig)
.isNotNull()
.satisfies(rc -> {
assertThat(rc.getFactor()).isEqualTo(replicationFactor);
if (asyncEnabled != null) {
assertThat(rc.getAsyncEnabled()).isEqualTo(asyncEnabled);
} else {
assertThat(rc.getAsyncEnabled()).isEqualTo(false);
}
});
}
}

0 comments on commit 05db887

Please sign in to comment.