introduce replica assignment change listener
diff --git a/chunk/server.go b/chunk/server.go
index c262509..7f07227 100644
--- a/chunk/server.go
+++ b/chunk/server.go
@@ -11,13 +11,17 @@
 )
 
 type ChunkServer struct {
-	factory          ChunkFactory
-	chunks           sync.Map
-	replicatorCancel sync.Map
+	factory             ChunkFactory
+	assignmentChangeLis ReplicaAssignmentChangeListener
+	chunks              sync.Map
+	replicatorCancel    sync.Map
 }
 
-func NewChunkServer(factory ChunkFactory) *ChunkServer {
-	return &ChunkServer{factory: factory}
+func NewChunkServer(factory ChunkFactory,
+	assignmentChangeLis ReplicaAssignmentChangeListener) *ChunkServer {
+	return &ChunkServer{
+		factory:             factory,
+		assignmentChangeLis: assignmentChangeLis}
 }
 
 func (s *ChunkServer) ListChunks(
@@ -40,10 +44,9 @@
 	case api.ReplicaRole_SECONDARY:
 		ctx, cancel := context.WithCancel(context.Background())
 		s.replicatorCancel.Store(req.ChunkId, cancel)
-		primaryListener := NewNonChangingPrimaryReplicaChangeListener(
-			req.ChunkId,
-			req.PrimaryAddress)
-		go ReplicateFromPrimary(ctx, chunk, primaryListener)
+		primaryAddressCh := s.assignmentChangeLis.Primary(
+			req.ChunkId, req.PrimaryAddress)
+		go ReplicateFromPrimary(ctx, req.ChunkId, chunk, primaryAddressCh)
 	case api.ReplicaRole_PRIMARY:
 		{
 		}