use of com.github.ambry.clustermap.MockClusterMap in project ambry by linkedin.
the class RequestResponseTest method deleteRequestResponseTest.
@Test
public void deleteRequestResponseTest() throws IOException {
MockClusterMap clusterMap = new MockClusterMap();
short accountId = Utils.getRandomShort(TestUtils.RANDOM);
short containerId = Utils.getRandomShort(TestUtils.RANDOM);
BlobId id1 = new BlobId(CommonTestUtils.getCurrentBlobIdVersion(), BlobId.BlobIdType.NATIVE, ClusterMap.UNKNOWN_DATACENTER_ID, accountId, containerId, clusterMap.getWritablePartitionIds(MockClusterMap.DEFAULT_PARTITION_CLASS).get(0), false, BlobId.BlobDataType.DATACHUNK);
short[] versions = new short[] { DeleteRequest.DELETE_REQUEST_VERSION_1, DeleteRequest.DELETE_REQUEST_VERSION_2 };
for (short version : versions) {
long deletionTimeMs = Utils.getRandomLong(TestUtils.RANDOM, Long.MAX_VALUE);
int correlationId = TestUtils.RANDOM.nextInt();
DeleteRequest deleteRequest;
if (version == DeleteRequest.DELETE_REQUEST_VERSION_1) {
deleteRequest = new DeleteRequestV1(correlationId, "client", id1);
} else {
deleteRequest = new DeleteRequest(correlationId, "client", id1, deletionTimeMs);
}
DataInputStream requestStream = serAndPrepForRead(deleteRequest, -1, true);
DeleteRequest deserializedDeleteRequest = DeleteRequest.readFrom(requestStream, clusterMap);
Assert.assertEquals(deserializedDeleteRequest.getClientId(), "client");
Assert.assertEquals(deserializedDeleteRequest.getBlobId(), id1);
if (version == DeleteRequest.DELETE_REQUEST_VERSION_2) {
Assert.assertEquals("AccountId mismatch ", id1.getAccountId(), deserializedDeleteRequest.getAccountId());
Assert.assertEquals("ContainerId mismatch ", id1.getContainerId(), deserializedDeleteRequest.getContainerId());
Assert.assertEquals("DeletionTime mismatch ", deletionTimeMs, deserializedDeleteRequest.getDeletionTimeInMs());
} else {
Assert.assertEquals("AccountId mismatch ", accountId, deserializedDeleteRequest.getAccountId());
Assert.assertEquals("ContainerId mismatch ", containerId, deserializedDeleteRequest.getContainerId());
Assert.assertEquals("DeletionTime mismatch ", Utils.Infinite_Time, deserializedDeleteRequest.getDeletionTimeInMs());
}
deleteRequest.release();
DeleteResponse response = new DeleteResponse(correlationId, "client", ServerErrorCode.No_Error);
requestStream = serAndPrepForRead(response, -1, false);
DeleteResponse deserializedDeleteResponse = DeleteResponse.readFrom(requestStream);
Assert.assertEquals(deserializedDeleteResponse.getCorrelationId(), correlationId);
Assert.assertEquals(deserializedDeleteResponse.getError(), ServerErrorCode.No_Error);
response.release();
}
}
use of com.github.ambry.clustermap.MockClusterMap in project ambry by linkedin.
the class RequestResponseTest method putRequestResponseTest.
@Test
public void putRequestResponseTest() throws IOException {
MockClusterMap clusterMap = new MockClusterMap();
int correlationId = 5;
String clientId = "client";
BlobId blobId = new BlobId(CommonTestUtils.getCurrentBlobIdVersion(), BlobId.BlobIdType.NATIVE, ClusterMap.UNKNOWN_DATACENTER_ID, Utils.getRandomShort(TestUtils.RANDOM), Utils.getRandomShort(TestUtils.RANDOM), clusterMap.getWritablePartitionIds(MockClusterMap.DEFAULT_PARTITION_CLASS).get(0), false, BlobId.BlobDataType.DATACHUNK);
byte[] userMetadata = new byte[50];
TestUtils.RANDOM.nextBytes(userMetadata);
int blobKeyLength = TestUtils.RANDOM.nextInt(4096);
byte[] blobKey = new byte[blobKeyLength];
TestUtils.RANDOM.nextBytes(blobKey);
int blobSize = 100;
byte[] blob = new byte[blobSize];
TestUtils.RANDOM.nextBytes(blob);
BlobProperties blobProperties = new BlobProperties(blobSize, "serviceID", "memberId", "contentType", false, Utils.Infinite_Time, Utils.getRandomShort(TestUtils.RANDOM), Utils.getRandomShort(TestUtils.RANDOM), TestUtils.RANDOM.nextBoolean(), null, null, null);
testPutRequest(clusterMap, correlationId, clientId, blobId, blobProperties, userMetadata, BlobType.DataBlob, blob, blobSize, blobKey);
doPutRequestTest(InvalidVersionPutRequest.Put_Request_Invalid_version, clusterMap, correlationId, clientId, blobId, blobProperties, userMetadata, BlobType.DataBlob, blob, blobSize, blobKey, null);
// Put Request with size in blob properties different from the data size and blob type: Data blob.
blobProperties = new BlobProperties(blobSize * 10, "serviceID", "memberId", "contentType", false, Utils.Infinite_Time, Utils.getRandomShort(TestUtils.RANDOM), Utils.getRandomShort(TestUtils.RANDOM), TestUtils.RANDOM.nextBoolean(), null, null, null);
testPutRequest(clusterMap, correlationId, clientId, blobId, blobProperties, userMetadata, BlobType.DataBlob, blob, blobSize, blobKey);
// Put Request with size in blob properties different from the data size and blob type: Metadata blob.
blobProperties = new BlobProperties(blobSize * 10, "serviceID", "memberId", "contentType", false, Utils.Infinite_Time, Utils.getRandomShort(TestUtils.RANDOM), Utils.getRandomShort(TestUtils.RANDOM), TestUtils.RANDOM.nextBoolean(), null, null, null);
testPutRequest(clusterMap, correlationId, clientId, blobId, blobProperties, userMetadata, BlobType.MetadataBlob, blob, blobSize, blobKey);
// Put Request with empty user metadata.
byte[] emptyUserMetadata = new byte[0];
blobProperties = new BlobProperties(blobSize, "serviceID", "memberId", "contentType", false, Utils.Infinite_Time, Utils.getRandomShort(TestUtils.RANDOM), Utils.getRandomShort(TestUtils.RANDOM), TestUtils.RANDOM.nextBoolean(), null, null, null);
testPutRequest(clusterMap, correlationId, clientId, blobId, blobProperties, emptyUserMetadata, BlobType.DataBlob, blob, blobSize, blobKey);
// Response test
PutResponse response = new PutResponse(1234, clientId, ServerErrorCode.No_Error);
DataInputStream responseStream = serAndPrepForRead(response, -1, false);
PutResponse deserializedPutResponse = PutResponse.readFrom(responseStream);
Assert.assertEquals(deserializedPutResponse.getCorrelationId(), 1234);
Assert.assertEquals(deserializedPutResponse.getError(), ServerErrorCode.No_Error);
response.release();
}
use of com.github.ambry.clustermap.MockClusterMap in project ambry by linkedin.
the class RequestResponseTest method testGetRequestResponse.
private void testGetRequestResponse(short getVersionToUse, short messageInfoAutoVersion) throws IOException {
GetResponse.CURRENT_VERSION = getVersionToUse;
MessageInfoAndMetadataListSerde.AUTO_VERSION = messageInfoAutoVersion;
MockClusterMap clusterMap = new MockClusterMap();
short accountId = Utils.getRandomShort(TestUtils.RANDOM);
short containerId = Utils.getRandomShort(TestUtils.RANDOM);
BlobId id1 = new BlobId(CommonTestUtils.getCurrentBlobIdVersion(), BlobId.BlobIdType.NATIVE, ClusterMap.UNKNOWN_DATACENTER_ID, accountId, containerId, clusterMap.getWritablePartitionIds(MockClusterMap.DEFAULT_PARTITION_CLASS).get(0), false, BlobId.BlobDataType.DATACHUNK);
ArrayList<BlobId> blobIdList = new ArrayList<BlobId>();
blobIdList.add(id1);
PartitionRequestInfo partitionRequestInfo1 = new PartitionRequestInfo(new MockPartitionId(), blobIdList);
ArrayList<PartitionRequestInfo> partitionRequestInfoList = new ArrayList<PartitionRequestInfo>();
partitionRequestInfoList.add(partitionRequestInfo1);
GetRequest getRequest = new GetRequest(1234, "clientId", MessageFormatFlags.Blob, partitionRequestInfoList, GetOption.None);
DataInputStream requestStream = serAndPrepForRead(getRequest, -1, true);
GetRequest deserializedGetRequest = GetRequest.readFrom(requestStream, clusterMap);
Assert.assertEquals(deserializedGetRequest.getClientId(), "clientId");
Assert.assertEquals(deserializedGetRequest.getPartitionInfoList().size(), 1);
Assert.assertEquals(deserializedGetRequest.getPartitionInfoList().get(0).getBlobIds().size(), 1);
Assert.assertEquals(deserializedGetRequest.getPartitionInfoList().get(0).getBlobIds().get(0), id1);
getRequest.release();
// Test GetResponse with InputStream
long operationTimeMs = SystemTime.getInstance().milliseconds() + TestUtils.RANDOM.nextInt();
byte[] encryptionKey = TestUtils.getRandomBytes(256);
MessageInfo messageInfo = new MessageInfo(id1, 1000, false, false, true, 1000, null, accountId, containerId, operationTimeMs, (short) 1);
MessageMetadata messageMetadata = new MessageMetadata(ByteBuffer.wrap(encryptionKey));
ArrayList<MessageInfo> messageInfoList = new ArrayList<>();
ArrayList<MessageMetadata> messageMetadataList = new ArrayList<>();
messageInfoList.add(messageInfo);
messageMetadataList.add(messageMetadata);
PartitionResponseInfo partitionResponseInfo = new PartitionResponseInfo(clusterMap.getWritablePartitionIds(MockClusterMap.DEFAULT_PARTITION_CLASS).get(0), messageInfoList, messageMetadataList);
List<PartitionResponseInfo> partitionResponseInfoList = new ArrayList<PartitionResponseInfo>();
partitionResponseInfoList.add(partitionResponseInfo);
byte[] buf = TestUtils.getRandomBytes(1000);
ByteArrayInputStream byteStream = new ByteArrayInputStream(buf);
GetResponse response = new GetResponse(1234, "clientId", partitionResponseInfoList, byteStream, ServerErrorCode.No_Error);
requestStream = serAndPrepForRead(response, -1, false);
GetResponse deserializedGetResponse = GetResponse.readFrom(requestStream, clusterMap);
Assert.assertEquals(deserializedGetResponse.getCorrelationId(), 1234);
Assert.assertEquals(deserializedGetResponse.getError(), ServerErrorCode.No_Error);
Assert.assertEquals(deserializedGetResponse.getPartitionResponseInfoList().size(), 1);
Assert.assertEquals(deserializedGetResponse.getPartitionResponseInfoList().get(0).getMessageInfoList().size(), 1);
MessageInfo msgInfo = deserializedGetResponse.getPartitionResponseInfoList().get(0).getMessageInfoList().get(0);
Assert.assertEquals(msgInfo.getSize(), 1000);
Assert.assertEquals(msgInfo.getStoreKey(), id1);
Assert.assertEquals(msgInfo.getExpirationTimeInMs(), 1000);
Assert.assertEquals(deserializedGetResponse.getPartitionResponseInfoList().get(0).getMessageMetadataList().size(), 1);
if (GetResponse.getCurrentVersion() >= GetResponse.GET_RESPONSE_VERSION_V_4) {
MessageMetadata messageMetadataInResponse = deserializedGetResponse.getPartitionResponseInfoList().get(0).getMessageMetadataList().get(0);
Assert.assertEquals(messageMetadata.getEncryptionKey().rewind(), messageMetadataInResponse.getEncryptionKey());
} else {
Assert.assertNull(deserializedGetResponse.getPartitionResponseInfoList().get(0).getMessageMetadataList().get(0));
}
if (GetResponse.getCurrentVersion() >= GetResponse.GET_RESPONSE_VERSION_V_3) {
Assert.assertEquals("AccountId mismatch ", accountId, msgInfo.getAccountId());
Assert.assertEquals("ConatinerId mismatch ", containerId, msgInfo.getContainerId());
Assert.assertEquals("OperationTime mismatch ", operationTimeMs, msgInfo.getOperationTimeMs());
} else {
Assert.assertEquals("AccountId mismatch ", UNKNOWN_ACCOUNT_ID, msgInfo.getAccountId());
Assert.assertEquals("ConatinerId mismatch ", UNKNOWN_CONTAINER_ID, msgInfo.getContainerId());
Assert.assertEquals("OperationTime mismatch ", Utils.Infinite_Time, msgInfo.getOperationTimeMs());
}
if (messageInfoAutoVersion >= MessageInfoAndMetadataListSerde.VERSION_6) {
Assert.assertTrue(msgInfo.isUndeleted());
Assert.assertEquals("LifeVersion mismatch", (short) 1, msgInfo.getLifeVersion());
} else {
Assert.assertFalse(msgInfo.isUndeleted());
Assert.assertEquals("LifeVersion mismatch", (short) 0, msgInfo.getLifeVersion());
}
response.release();
// Test GetResponse with Send
for (boolean useComposite : new boolean[] { false, true }) {
for (boolean withContent : new boolean[] { false, true }) {
operationTimeMs = SystemTime.getInstance().milliseconds() + TestUtils.RANDOM.nextInt();
encryptionKey = TestUtils.getRandomBytes(256);
messageInfo = new MessageInfo(id1, 1000, false, false, true, 1000, null, accountId, containerId, operationTimeMs, (short) 1);
messageMetadata = new MessageMetadata(ByteBuffer.wrap(encryptionKey));
messageInfoList.clear();
messageMetadataList.clear();
messageInfoList.add(messageInfo);
messageMetadataList.add(messageMetadata);
partitionResponseInfo = new PartitionResponseInfo(clusterMap.getWritablePartitionIds(MockClusterMap.DEFAULT_PARTITION_CLASS).get(0), messageInfoList, messageMetadataList);
partitionResponseInfoList.clear();
partitionResponseInfoList.add(partitionResponseInfo);
Send send;
if (withContent) {
send = new SendWithContent(1000, useComposite);
} else {
send = new SendWithoutContent(1000, useComposite);
}
response = new GetResponse(1234, "clientId", partitionResponseInfoList, send, ServerErrorCode.No_Error);
requestStream = serAndPrepForRead(response, -1, false);
deserializedGetResponse = GetResponse.readFrom(requestStream, clusterMap);
Assert.assertEquals(deserializedGetResponse.getCorrelationId(), 1234);
Assert.assertEquals(deserializedGetResponse.getError(), ServerErrorCode.No_Error);
Assert.assertEquals(deserializedGetResponse.getPartitionResponseInfoList().size(), 1);
Assert.assertEquals(deserializedGetResponse.getPartitionResponseInfoList().get(0).getMessageInfoList().size(), 1);
msgInfo = deserializedGetResponse.getPartitionResponseInfoList().get(0).getMessageInfoList().get(0);
Assert.assertEquals(msgInfo.getSize(), 1000);
Assert.assertEquals(msgInfo.getStoreKey(), id1);
Assert.assertEquals(msgInfo.getExpirationTimeInMs(), 1000);
Assert.assertEquals(deserializedGetResponse.getPartitionResponseInfoList().get(0).getMessageMetadataList().size(), 1);
response.release();
}
}
}
use of com.github.ambry.clustermap.MockClusterMap in project ambry by linkedin.
the class ReplicationTest method replicaFromOfflineToBootstrapTest.
/**
* Test that state transition in replication manager from OFFLINE to BOOTSTRAP
* @throws Exception
*/
@Test
public void replicaFromOfflineToBootstrapTest() throws Exception {
MockClusterMap clusterMap = new MockClusterMap();
ClusterMapConfig clusterMapConfig = new ClusterMapConfig(verifiableProperties);
MockHelixParticipant.metricRegistry = new MetricRegistry();
MockHelixParticipant mockHelixParticipant = new MockHelixParticipant(clusterMapConfig);
DataNodeId currentNode = clusterMap.getDataNodeIds().get(0);
Pair<StorageManager, ReplicationManager> managers = createStorageManagerAndReplicationManager(clusterMap, clusterMapConfig, mockHelixParticipant);
StorageManager storageManager = managers.getFirst();
MockReplicationManager replicationManager = (MockReplicationManager) managers.getSecond();
assertTrue("State change listener in cluster participant should contain replication manager listener", mockHelixParticipant.getPartitionStateChangeListeners().containsKey(StateModelListenerType.ReplicationManagerListener));
// 1. test partition not found case (should throw exception)
try {
mockHelixParticipant.onPartitionBecomeBootstrapFromOffline("-1");
fail("should fail because replica is not found");
} catch (StateTransitionException e) {
assertEquals("Transition error doesn't match", ReplicaNotFound, e.getErrorCode());
}
// 2. create a new partition and test replica addition success case
ReplicaId newReplicaToAdd = getNewReplicaToAdd(clusterMap);
PartitionId newPartition = newReplicaToAdd.getPartitionId();
assertTrue("Adding new replica to Storage Manager should succeed", storageManager.addBlobStore(newReplicaToAdd));
assertFalse("partitionToPartitionInfo should not contain new partition", replicationManager.partitionToPartitionInfo.containsKey(newPartition));
mockHelixParticipant.onPartitionBecomeBootstrapFromOffline(newPartition.toPathString());
assertTrue("partitionToPartitionInfo should contain new partition", replicationManager.partitionToPartitionInfo.containsKey(newPartition));
// 3. test replica addition failure case
replicationManager.partitionToPartitionInfo.remove(newPartition);
replicationManager.addReplicaReturnVal = false;
try {
mockHelixParticipant.onPartitionBecomeBootstrapFromOffline(newPartition.toPathString());
fail("should fail due to replica addition failure");
} catch (StateTransitionException e) {
assertEquals("Transition error doesn't match", ReplicaOperationFailure, e.getErrorCode());
}
replicationManager.addReplicaReturnVal = null;
// 4. test OFFLINE -> BOOTSTRAP on existing replica (should be no-op)
ReplicaId existingReplica = clusterMap.getReplicaIds(currentNode).get(0);
assertTrue("partitionToPartitionInfo should contain existing partition", replicationManager.partitionToPartitionInfo.containsKey(existingReplica.getPartitionId()));
mockHelixParticipant.onPartitionBecomeBootstrapFromOffline(existingReplica.getPartitionId().toPathString());
storageManager.shutdown();
}
use of com.github.ambry.clustermap.MockClusterMap in project ambry by linkedin.
the class ReplicationTest method replicaThreadTestConverter.
/**
* Tests that replication between a local and remote server who have different
* blob IDs for the same blobs (via StoreKeyConverter)
* @throws Exception
*/
@Test
public void replicaThreadTestConverter() throws Exception {
MockClusterMap clusterMap = new MockClusterMap();
Pair<MockHost, MockHost> localAndRemoteHosts = getLocalAndRemoteHosts(clusterMap);
MockHost localHost = localAndRemoteHosts.getFirst();
MockHost remoteHost = localAndRemoteHosts.getSecond();
MockHost expectedLocalHost = new MockHost(localHost.dataNodeId, clusterMap);
MockStoreKeyConverterFactory storeKeyConverterFactory = new MockStoreKeyConverterFactory(null, null);
storeKeyConverterFactory.setConversionMap(new HashMap<>());
storeKeyConverterFactory.setReturnInputIfAbsent(true);
MockStoreKeyConverterFactory.MockStoreKeyConverter storeKeyConverter = storeKeyConverterFactory.getStoreKeyConverter();
List<PartitionId> partitionIds = clusterMap.getWritablePartitionIds(null);
Map<PartitionId, List<StoreKey>> idsToBeIgnoredByPartition = new HashMap<>();
StoreKeyFactory storeKeyFactory = new BlobIdFactory(clusterMap);
Transformer transformer = new BlobIdTransformer(storeKeyFactory, storeKeyConverter);
int batchSize = 4;
Pair<Map<DataNodeId, List<RemoteReplicaInfo>>, ReplicaThread> replicasAndThread = getRemoteReplicasAndReplicaThread(batchSize, clusterMap, localHost, remoteHost, storeKeyConverter, transformer, null, null);
Map<DataNodeId, List<RemoteReplicaInfo>> replicasToReplicate = replicasAndThread.getFirst();
ReplicaThread replicaThread = replicasAndThread.getSecond();
/*
STORE KEY CONVERTER MAPPING
Key Value
B0 B0'
B1 B1'
B2 null
BEFORE
Local Remote
B0' B0
B1
B2
AFTER
Local Remote
B0' B0
B1' B1
B2
B0 is B0' for local,
B1 is B1' for local,
B2 is null for local,
so it already has B0/B0'
B1 is transferred to B1'
and B2 is invalid for L
so it does not count as missing
Missing Keys: 1
*/
Map<PartitionId, List<BlobId>> partitionIdToDeleteBlobId = new HashMap<>();
Map<StoreKey, StoreKey> conversionMap = new HashMap<>();
Map<PartitionId, BlobId> expectedPartitionIdToDeleteBlobId = new HashMap<>();
for (int i = 0; i < partitionIds.size(); i++) {
PartitionId partitionId = partitionIds.get(i);
List<BlobId> deleteBlobIds = new ArrayList<>();
partitionIdToDeleteBlobId.put(partitionId, deleteBlobIds);
BlobId b0 = generateRandomBlobId(partitionId);
deleteBlobIds.add(b0);
BlobId b0p = generateRandomBlobId(partitionId);
expectedPartitionIdToDeleteBlobId.put(partitionId, b0p);
BlobId b1 = generateRandomBlobId(partitionId);
BlobId b1p = generateRandomBlobId(partitionId);
BlobId b2 = generateRandomBlobId(partitionId);
deleteBlobIds.add(b2);
conversionMap.put(b0, b0p);
conversionMap.put(b1, b1p);
conversionMap.put(b2, null);
// Convert current conversion map so that BlobIdTransformer can
// create b1p in expectedLocalHost
storeKeyConverter.setConversionMap(conversionMap);
storeKeyConverter.convert(conversionMap.keySet());
addPutMessagesToReplicasOfPartition(Arrays.asList(b0p), Arrays.asList(localHost));
addPutMessagesToReplicasOfPartition(Arrays.asList(b0, b1, b2), Arrays.asList(remoteHost));
addPutMessagesToReplicasOfPartition(Arrays.asList(b0p, b1), Arrays.asList(null, transformer), Arrays.asList(expectedLocalHost));
// Check that expected local host contains the correct blob ids
Set<BlobId> expectedLocalHostBlobIds = new HashSet<>();
expectedLocalHostBlobIds.add(b0p);
expectedLocalHostBlobIds.add(b1p);
for (MessageInfo messageInfo : expectedLocalHost.infosByPartition.get(partitionId)) {
assertTrue("Remove should never fail", expectedLocalHostBlobIds.remove(messageInfo.getStoreKey()));
}
assertTrue("expectedLocalHostBlobIds should now be empty", expectedLocalHostBlobIds.isEmpty());
}
storeKeyConverter.setConversionMap(conversionMap);
int expectedIndex = assertMissingKeysAndFixMissingStoreKeys(0, 2, batchSize, 1, replicaThread, remoteHost, replicasToReplicate);
// Check that there are no missing buffers between expectedLocalHost and LocalHost
Map<PartitionId, List<ByteBuffer>> missingBuffers = expectedLocalHost.getMissingBuffers(localHost.buffersByPartition);
assertTrue(missingBuffers.isEmpty());
missingBuffers = localHost.getMissingBuffers(expectedLocalHost.buffersByPartition);
assertTrue(missingBuffers.isEmpty());
// delete blob
for (int i = 0; i < partitionIds.size(); i++) {
PartitionId partitionId = partitionIds.get(i);
List<BlobId> deleteBlobIds = partitionIdToDeleteBlobId.get(partitionId);
for (BlobId deleteBlobId : deleteBlobIds) {
addDeleteMessagesToReplicasOfPartition(partitionId, deleteBlobId, Arrays.asList(remoteHost));
}
addDeleteMessagesToReplicasOfPartition(partitionId, expectedPartitionIdToDeleteBlobId.get(partitionId), Arrays.asList(expectedLocalHost));
}
expectedIndex = assertMissingKeysAndFixMissingStoreKeys(expectedIndex, 2, batchSize, 0, replicaThread, remoteHost, replicasToReplicate);
// Check that there are no missing buffers between expectedLocalHost and LocalHost
missingBuffers = expectedLocalHost.getMissingBuffers(localHost.buffersByPartition);
assertTrue(missingBuffers.isEmpty());
missingBuffers = localHost.getMissingBuffers(expectedLocalHost.buffersByPartition);
assertTrue(missingBuffers.isEmpty());
// 3 unconverted + 2 unconverted deleted expected missing buffers
verifyNoMoreMissingKeysAndExpectedMissingBufferCount(remoteHost, localHost, replicaThread, replicasToReplicate, idsToBeIgnoredByPartition, storeKeyConverter, expectedIndex, expectedIndex, 5);
}
Aggregations