Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IGNITE-22233 Zone replica listener #3931

Merged
merged 81 commits into from
Jul 23, 2024
Merged
Show file tree
Hide file tree
Changes from 56 commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
43ccf57
fix metastore assignments
kgusakov May 23, 2024
6809e39
fix packages
kgusakov Jun 2, 2024
af43870
fix network messages packages
kgusakov Jun 2, 2024
a48e7e0
refactoring
kgusakov Jun 2, 2024
6b63740
refactoring + code cleanup
kgusakov Jun 2, 2024
942b8bd
code cleanup
kgusakov Jun 2, 2024
fde74e1
fix keys methods
kgusakov Jun 2, 2024
8b11900
fix checkstyle
kgusakov Jun 3, 2024
dcba0c1
fix imports
kgusakov Jun 3, 2024
dbaa737
fix codestyle
kgusakov Jun 3, 2024
cd2075d
remove todo
kgusakov Jun 3, 2024
992e06d
Merge branch 'main' into ignite-22231
kgusakov Jun 5, 2024
501c634
fix pr comments
kgusakov Jun 5, 2024
6f1d7d1
fix pr comments
kgusakov Jun 5, 2024
23ba165
get the actual version of ZonePartitionId from feature branch
kgusakov Jun 5, 2024
dd6cb7a
rename ReplicaLifecycleManager
kgusakov Jun 5, 2024
8abfbf4
change ticket for TODO
kgusakov Jun 5, 2024
6f4fef4
fix PR comment
kgusakov Jun 5, 2024
e4f0652
Merge branch 'main' into ignite-22231
kgusakov Jun 6, 2024
d77ad7c
fix after merge main
kgusakov Jun 6, 2024
e6d9cd1
fix multinode test
kgusakov Jun 6, 2024
7eab822
rename module
kgusakov Jun 6, 2024
eaeab49
fix package names
kgusakov Jun 6, 2024
26ea269
Refactor replica start/stop according to main. Added Replica interface
kgusakov Jun 11, 2024
5f36c6c
fix checkstyle
kgusakov Jun 11, 2024
4f3ca0b
Merge branch 'main' into ignite-22231
kgusakov Jun 11, 2024
8ecc140
working test
kgusakov Jun 11, 2024
6f0621f
added test for two tables
kgusakov Jun 12, 2024
16752ce
fix compilation
kgusakov Jun 12, 2024
8124e8a
code cleanup
kgusakov Jun 13, 2024
193c470
Add TableAware interface
kgusakov Jun 13, 2024
c4083a7
fix checkstyle
kgusakov Jun 16, 2024
faeedb9
get ReplicaImpl from main
kgusakov Jun 17, 2024
88222ab
Merge branch 'main' into ignite-22231
kgusakov Jun 17, 2024
88860c0
Merge branch 'ignite-22231' into ignite-22233
kgusakov Jun 17, 2024
776154e
fix pr comments
kgusakov Jun 18, 2024
bbf62e1
fix pr comments
kgusakov Jun 18, 2024
e7f7199
rename module to partition-replicator
kgusakov Jun 18, 2024
b0f9a24
fix pr comments
kgusakov Jun 18, 2024
16cb7fe
fix pr comments
kgusakov Jun 18, 2024
104ef0a
fix pr comments
kgusakov Jun 18, 2024
b164659
fix pr comments
kgusakov Jun 18, 2024
a671390
remove from assignments method
kgusakov Jun 18, 2024
65cc597
Merge branch 'ignite-22231' into ignite-22233
kgusakov Jun 18, 2024
865a65a
after merge fix
kgusakov Jun 18, 2024
764c49a
fix marshaller
kgusakov Jun 18, 2024
e0ee5a9
Merge branch 'ignite-22231' into ignite-22233
kgusakov Jun 18, 2024
a751b48
Merge branch 'main' into ignite-22233
kgusakov Jun 20, 2024
700d182
fix after merge
kgusakov Jun 20, 2024
09f6129
Merge branch 'main' into ignite-22233
kgusakov Jun 20, 2024
37220b8
remove old listener
kgusakov Jun 20, 2024
cec2bff
fix futures flow and assertion
kgusakov Jun 21, 2024
ac4246e
fix checkstyle
kgusakov Jun 21, 2024
c3b3192
Merge branch 'main' into ignite-22233
kgusakov Jun 21, 2024
1a152a2
fix test
kgusakov Jun 21, 2024
a414710
fix tests after merges
kgusakov Jun 21, 2024
3b9a9e1
Merge branch 'main' into ignite-22233
kgusakov Jun 26, 2024
0af7e0f
fix pr comments
kgusakov Jun 26, 2024
d369680
fix pr comments
kgusakov Jun 26, 2024
7d061b2
fix PR comments
kgusakov Jun 30, 2024
f84fe37
fix PR comments
kgusakov Jun 30, 2024
65ff65b
fix compilation
kgusakov Jun 30, 2024
e813287
fix checkstyle and pmd
kgusakov Jul 1, 2024
a6adc7d
Merge branch 'main' into ignite-22233
kgusakov Jul 1, 2024
b1c5dc5
fix compilation
kgusakov Jul 1, 2024
8f5b8ae
new flow
kgusakov Jul 3, 2024
b756848
remove assignments
kgusakov Jul 7, 2024
b7e8024
Merge branch 'main' into ignite-22233
kgusakov Jul 7, 2024
c6411ba
fixed version with tx messages handling
kgusakov Jul 18, 2024
c29cdb8
Merge branch 'main' into ignite-22233
kgusakov Jul 19, 2024
77ab50a
remove local events
kgusakov Jul 19, 2024
43149e6
removed unused method
kgusakov Jul 21, 2024
239dcbf
fix redundant code
kgusakov Jul 21, 2024
63de503
Merge branch 'main' into ignite-22233
kgusakov Jul 21, 2024
1f5dbed
fix test
kgusakov Jul 21, 2024
c519ff9
fix pr comments
kgusakov Jul 22, 2024
bd56cdc
Merge branch 'main' into ignite-22233
kgusakov Jul 22, 2024
e7d5052
fix pr comment
kgusakov Jul 23, 2024
70cb1bc
remove unused import
kgusakov Jul 23, 2024
5311ee5
fix naming
kgusakov Jul 23, 2024
163b4ba
fix checkstyle
kgusakov Jul 23, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ void after() {
}

@Test
public void testEmptyReplicaListener() throws NodeStoppingException {
public void testZoneReplicaListener() throws NodeStoppingException {
Assignment replicaAssignment = (Assignment) AffinityUtils.calculateAssignmentForPartition(
nodes.stream().map(n -> n.name).collect(Collectors.toList()), 0, 1).toArray()[0];

Expand All @@ -293,17 +293,33 @@ public void testEmptyReplicaListener() throws NodeStoppingException {
createZone(node, "test_zone", 1, 1);
int zoneId = DistributionZonesTestUtil.getZoneId(node.catalogManager, "test_zone", node.hybridClock.nowLong());

createTable(node, "test_zone", "test_table");
int tableId = TableTestUtils.getTableId(node.catalogManager, "test_table", node.hybridClock.nowLong());
{
createTable(node, "test_zone", "test_table");
int tableId = TableTestUtils.getTableId(node.catalogManager, "test_table", node.hybridClock.nowLong());

node.converter.put(new TablePartitionId(tableId, 0), new ZonePartitionId(zoneId, 0));
node.converter.put(new TablePartitionId(tableId, 0), new ZonePartitionId(zoneId, 0));

KeyValueView<Long, Integer> keyValueView = node.tableManager.table(tableId).keyValueView(Long.class, Integer.class);
KeyValueView<Long, Integer> keyValueView = node.tableManager.table(tableId).keyValueView(Long.class, Integer.class);

assertDoesNotThrow(() -> keyValueView.put(null, 1L, 1));
assertDoesNotThrow(() -> keyValueView.put(null, 1L, 100));

// Actually we are testing not the fair put value, but the hardcoded one from temporary noop replica listener
assertEquals(-1, keyValueView.get(null, 1L));
// Actually we are testing not the fair put value, but the hardcoded one from temporary noop replica listener
assertEquals(100, keyValueView.get(null, 1L));
}

{
createTable(node, "test_zone", "test_table1");
int tableId = TableTestUtils.getTableId(node.catalogManager, "test_table1", node.hybridClock.nowLong());

node.converter.put(new TablePartitionId(tableId, 0), new ZonePartitionId(zoneId, 0));

KeyValueView<Long, Integer> keyValueView = node.tableManager.table(tableId).keyValueView(Long.class, Integer.class);

assertDoesNotThrow(() -> keyValueView.put(null, 1L, 200));

// Actually we are testing not the fair put value, but the hardcoded one from temporary noop replica listener
sanpwc marked this conversation as resolved.
Show resolved Hide resolved
assertEquals(200, keyValueView.get(null, 1L));
}
}

private Node getNode(int nodeIndex) {
Expand Down Expand Up @@ -682,7 +698,7 @@ class Node {
clusterService.topologyService(),
clusterService.serializationRegistry(),
replicaManager,
mock(LockManager.class),
lockManager,
replicaSvc,
txManager,
dataStorageMgr,
Expand All @@ -704,7 +720,8 @@ class Node {
resourcesRegistry,
lowWatermark,
transactionInflights,
indexMetaStorage
indexMetaStorage,
partitionReplicaLifecycleManager
);

indexManager = new IndexManager(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,12 @@
import org.apache.ignite.internal.raft.PeersAndLearners;
import org.apache.ignite.internal.raft.RaftGroupEventsListener;
import org.apache.ignite.internal.raft.service.RaftGroupListener;
import org.apache.ignite.internal.replicator.Replica;
import org.apache.ignite.internal.replicator.ReplicaManager;
import org.apache.ignite.internal.replicator.ReplicationGroupId;
import org.apache.ignite.internal.replicator.TablePartitionId;
import org.apache.ignite.internal.replicator.ZonePartitionId;
import org.apache.ignite.internal.replicator.ZonePartitionReplicaImpl;
import org.apache.ignite.internal.util.ExceptionUtils;
import org.apache.ignite.internal.util.IgniteSpinBusyLock;
import org.apache.ignite.internal.util.IgniteUtils;
Expand Down Expand Up @@ -200,7 +203,6 @@ private CompletableFuture<Void> createZonePartitionReplicationNodes(int zoneId,
try {
return replicaMgr.startReplica(
replicaGrpId,
new ZonePartitionReplicaListener(),
new FailFastSnapshotStorageFactory(),
realConfiguration,
raftGroupListener,
Expand Down Expand Up @@ -229,6 +231,24 @@ public void beforeNodeStop() {
cleanUpPartitionsResources(replicationGroupIds);
}

/**
* Add table replica to the aggregated zone replica.
*
* @param zonePartitionId Zone partition id.
* @param replicationGroupId Table partition id.
* @param replica Table replica
* @return Future, which will be completed when operation done
*/
public CompletableFuture<Void> addTableReplica(ZonePartitionId zonePartitionId, TablePartitionId replicationGroupId, Replica replica) {
sanpwc marked this conversation as resolved.
Show resolved Hide resolved
if (!ENABLED) {
return nullCompletedFuture();
}

return replicaMgr
.replica(zonePartitionId)
.thenAccept(r -> ((ZonePartitionReplicaImpl) r).addReplica(replicationGroupId, replica));
}

/**
* Writes the set of assignments to meta storage. If there are some assignments already, gets them from meta storage. Returns
* the list of assignments that really are in meta storage.
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,11 @@
import org.apache.ignite.internal.network.annotations.Transferable;
import org.apache.ignite.internal.partition.replicator.network.PartitionReplicationMessageGroup;
import org.apache.ignite.internal.replicator.message.ReadOnlyDirectReplicaRequest;
import org.apache.ignite.internal.replicator.message.TableAware;

/**
* Read only direct multi row replica request.
*/
@Transferable(PartitionReplicationMessageGroup.RO_DIRECT_MULTI_ROW_REPLICA_REQUEST)
public interface ReadOnlyDirectMultiRowReplicaRequest extends MultipleRowPkReplicaRequest, ReadOnlyDirectReplicaRequest {
public interface ReadOnlyDirectMultiRowReplicaRequest extends MultipleRowPkReplicaRequest, ReadOnlyDirectReplicaRequest, TableAware {
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,12 @@
import org.apache.ignite.internal.network.annotations.Transferable;
import org.apache.ignite.internal.partition.replicator.network.PartitionReplicationMessageGroup;
import org.apache.ignite.internal.replicator.message.ReadOnlyDirectReplicaRequest;
import org.apache.ignite.internal.replicator.message.TableAware;

/**
* Read only direct node single row replica request.
* The type of RO request never waits and is executed at the current node timestamp.
*/
@Transferable(PartitionReplicationMessageGroup.RO_DIRECT_SINGLE_ROW_REPLICA_REQUEST)
public interface ReadOnlyDirectSingleRowReplicaRequest extends SingleRowPkReplicaRequest, ReadOnlyDirectReplicaRequest {
public interface ReadOnlyDirectSingleRowReplicaRequest extends SingleRowPkReplicaRequest, ReadOnlyDirectReplicaRequest, TableAware {
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,11 @@

import org.apache.ignite.internal.network.annotations.Transferable;
import org.apache.ignite.internal.partition.replicator.network.PartitionReplicationMessageGroup;
import org.apache.ignite.internal.replicator.message.TableAware;

/**
* Read only multi row replica request.
*/
@Transferable(PartitionReplicationMessageGroup.RO_MULTI_ROW_REPLICA_REQUEST)
public interface ReadOnlyMultiRowPkReplicaRequest extends MultipleRowPkReplicaRequest, ReadOnlyReplicaRequest {
public interface ReadOnlyMultiRowPkReplicaRequest extends MultipleRowPkReplicaRequest, ReadOnlyReplicaRequest, TableAware {
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,13 @@
import java.util.UUID;
import org.apache.ignite.internal.network.annotations.Transferable;
import org.apache.ignite.internal.partition.replicator.network.PartitionReplicationMessageGroup;
import org.apache.ignite.internal.replicator.message.TableAware;

/**
* Scan retrieve batch replica request.
*/
@Transferable(PartitionReplicationMessageGroup.RO_SCAN_RETRIEVE_BATCH_REPLICA_REQUEST)
public interface ReadOnlyScanRetrieveBatchReplicaRequest extends ScanRetrieveBatchReplicaRequest, ReadOnlyReplicaRequest {
public interface ReadOnlyScanRetrieveBatchReplicaRequest extends ScanRetrieveBatchReplicaRequest, ReadOnlyReplicaRequest, TableAware {
UUID transactionId();

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,11 @@

import org.apache.ignite.internal.network.annotations.Transferable;
import org.apache.ignite.internal.partition.replicator.network.PartitionReplicationMessageGroup;
import org.apache.ignite.internal.replicator.message.TableAware;

/**
* Read only single row replica request.
*/
@Transferable(PartitionReplicationMessageGroup.RO_SINGLE_ROW_REPLICA_REQUEST)
public interface ReadOnlySingleRowPkReplicaRequest extends SingleRowPkReplicaRequest, ReadOnlyReplicaRequest {
public interface ReadOnlySingleRowPkReplicaRequest extends SingleRowPkReplicaRequest, ReadOnlyReplicaRequest, TableAware {
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@

import org.apache.ignite.internal.network.annotations.Transferable;
import org.apache.ignite.internal.partition.replicator.network.PartitionReplicationMessageGroup;
import org.apache.ignite.internal.replicator.message.TableAware;

/**
* Read-write multi-row replica request involving table's Primary Keys.
*/
@Transferable(PartitionReplicationMessageGroup.RW_MULTI_ROW_PK_REPLICA_REQUEST)
public interface ReadWriteMultiRowPkReplicaRequest extends MultipleRowPkReplicaRequest, ReadWriteReplicaRequest {
public interface ReadWriteMultiRowPkReplicaRequest extends MultipleRowPkReplicaRequest, ReadWriteReplicaRequest, TableAware {
/**
* Disable delayed ack optimization.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,14 @@
import java.util.BitSet;
import org.apache.ignite.internal.network.annotations.Transferable;
import org.apache.ignite.internal.partition.replicator.network.PartitionReplicationMessageGroup;
import org.apache.ignite.internal.replicator.message.TableAware;
import org.jetbrains.annotations.Nullable;

/**
* Read-write multi-row replica request.
*/
@Transferable(PartitionReplicationMessageGroup.RW_MULTI_ROW_REPLICA_REQUEST)
public interface ReadWriteMultiRowReplicaRequest extends MultipleRowReplicaRequest, ReadWriteReplicaRequest {
public interface ReadWriteMultiRowReplicaRequest extends MultipleRowReplicaRequest, ReadWriteReplicaRequest, TableAware {
/**
* Disable delayed ack optimization.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,11 @@

import org.apache.ignite.internal.network.annotations.Transferable;
import org.apache.ignite.internal.partition.replicator.network.PartitionReplicationMessageGroup;
import org.apache.ignite.internal.replicator.message.TableAware;

/**
* Scan retrieve batch replica request.
*/
@Transferable(PartitionReplicationMessageGroup.RW_SCAN_RETRIEVE_BATCH_REPLICA_REQUEST)
public interface ReadWriteScanRetrieveBatchReplicaRequest extends ScanRetrieveBatchReplicaRequest, ReadWriteReplicaRequest {
public interface ReadWriteScanRetrieveBatchReplicaRequest extends ScanRetrieveBatchReplicaRequest, ReadWriteReplicaRequest, TableAware {
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,11 @@

import org.apache.ignite.internal.network.annotations.Transferable;
import org.apache.ignite.internal.partition.replicator.network.PartitionReplicationMessageGroup;
import org.apache.ignite.internal.replicator.message.TableAware;

/**
* Read-write single-row replica request involving a table's Primary Key..
*/
@Transferable(PartitionReplicationMessageGroup.RW_SINGLE_ROW_PK_REPLICA_REQUEST)
public interface ReadWriteSingleRowPkReplicaRequest extends SingleRowPkReplicaRequest, ReadWriteReplicaRequest {
public interface ReadWriteSingleRowPkReplicaRequest extends SingleRowPkReplicaRequest, ReadWriteReplicaRequest, TableAware {
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,11 @@

import org.apache.ignite.internal.network.annotations.Transferable;
import org.apache.ignite.internal.partition.replicator.network.PartitionReplicationMessageGroup;
import org.apache.ignite.internal.replicator.message.TableAware;

/**
* Read-write single-row replica request.
*/
@Transferable(PartitionReplicationMessageGroup.RW_SINGLE_ROW_REPLICA_REQUEST)
public interface ReadWriteSingleRowReplicaRequest extends SingleRowReplicaRequest, ReadWriteReplicaRequest {
public interface ReadWriteSingleRowReplicaRequest extends SingleRowReplicaRequest, ReadWriteReplicaRequest, TableAware {
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,12 @@

import org.apache.ignite.internal.network.annotations.Transferable;
import org.apache.ignite.internal.partition.replicator.network.PartitionReplicationMessageGroup;
import org.apache.ignite.internal.replicator.message.TableAware;

/**
* Read-write dual row replica request.
*/
@Transferable(PartitionReplicationMessageGroup.RW_DUAL_ROW_REPLICA_REQUEST)
public interface ReadWriteSwapRowReplicaRequest extends SwapRowReplicaRequest, ReadWriteReplicaRequest {
public interface ReadWriteSwapRowReplicaRequest extends SwapRowReplicaRequest, ReadWriteReplicaRequest, TableAware {

}
Original file line number Diff line number Diff line change
Expand Up @@ -504,7 +504,7 @@ private CompletableFuture<TopologyAwareRaftGroupService> createReplicationGroup(
);
serviceFutures.add(raftClientFut);

CompletableFuture<Boolean> replicaFuture = raftClientFut.thenCompose(raftClient -> {
CompletableFuture<Replica> replicaFuture = raftClientFut.thenCompose(raftClient -> {
try {
ReplicaListener listener = new ReplicaListener() {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -558,7 +558,7 @@ private void stopLeaseProlongation(ReplicationGroupId groupId, @Nullable String
});
}

private CompletableFuture<Boolean> startReplicaInternal(
private CompletableFuture<Replica> startReplicaInternal(
RaftGroupEventsListener raftGroupEventsListener,
RaftGroupListener raftGroupListener,
boolean isVolatileStorage,
Expand Down Expand Up @@ -611,7 +611,7 @@ private CompletableFuture<Boolean> startReplicaInternal(
* @param newConfiguration A configuration for new raft group.
* @return Future that promises ready new replica when done.
*/
public CompletableFuture<Boolean> startReplica(
public CompletableFuture<Replica> startReplica(
RaftGroupEventsListener raftGroupEventsListener,
RaftGroupListener raftGroupListener,
boolean isVolatileStorage,
Expand Down Expand Up @@ -646,7 +646,6 @@ public CompletableFuture<Boolean> startReplica(
* Starts a replica. If a replica with the same partition id already exists, the method throws an exception.
*
* @param replicaGrpId Replication group id.
* @param listener Replica listener.
* @param snapshotStorageFactory Snapshot storage factory for raft group option's parameterization.
* @param newConfiguration A configuration for new raft group.
* @param raftGroupListener Raft group listener for raft group starting.
Expand All @@ -657,7 +656,6 @@ public CompletableFuture<Boolean> startReplica(
*/
public CompletableFuture<Replica> startReplica(
ReplicationGroupId replicaGrpId,
ReplicaListener listener,
sanpwc marked this conversation as resolved.
Show resolved Hide resolved
SnapshotStorageFactory snapshotStorageFactory,
PeersAndLearners newConfiguration,
RaftGroupListener raftGroupListener,
Expand All @@ -680,8 +678,7 @@ public CompletableFuture<Replica> startReplica(
LOG.info("Replica is about to start [replicationGroupId={}].", replicaGrpId);

Replica newReplica = new ZonePartitionReplicaImpl(
replicaGrpId,
listener
replicaGrpId
);

CompletableFuture<Replica> replicaFuture = replicas.compute(replicaGrpId, (k, existingReplicaFuture) -> {
Expand Down Expand Up @@ -726,7 +723,7 @@ public CompletableFuture<Replica> startReplica(
*/
@VisibleForTesting
@Deprecated
public CompletableFuture<Boolean> startReplica(
public CompletableFuture<Replica> startReplica(
ReplicationGroupId replicaGrpId,
PeersAndLearners newConfiguration,
Consumer<RaftGroupService> updateTableRaftService,
Expand All @@ -736,14 +733,13 @@ public CompletableFuture<Boolean> startReplica(
) throws NodeStoppingException {
LOG.info("Replica is about to start [replicationGroupId={}].", replicaGrpId);

CompletableFuture<Boolean> resultFuture = newRaftClientFut.thenAccept(updateTableRaftService)
.thenApply((v) -> true);

CompletableFuture<ReplicaListener> newReplicaListenerFut = newRaftClientFut.thenApply(createListener);
CompletableFuture<TopologyAwareRaftGroupService> resultFuture = newRaftClientFut
.thenAccept(updateTableRaftService)
.thenCompose((v) -> newRaftClientFut);

startReplica(replicaGrpId, storageIndexTracker, newReplicaListenerFut);
CompletableFuture<ReplicaListener> newReplicaListenerFut = resultFuture.thenApply(createListener);
sanpwc marked this conversation as resolved.
Show resolved Hide resolved

return resultFuture;
return startReplica(replicaGrpId, storageIndexTracker, newReplicaListenerFut);
}

/**
Expand Down
Loading