@@ -28,14 +28,21 @@ function load (kv) {
2828 process . nextTick ( function ( ) {
2929 tracker . on ( 'replica' , sendData )
3030 } )
31- tracker . on ( 'moved' , function ( ) {
31+ tracker . on ( 'move' , function ( peer ) {
32+ if ( peer ) {
33+ sendData ( peer )
34+ }
3235 entry . hasTracker = false
3336 const rs = streams . get ( key ) || [ ]
34- rs . forEach ( ( stream ) => stream . end ( ) )
37+ rs . forEach ( ( stream ) => {
38+ stream . push ( null )
39+ } )
3540 streams . delete ( key )
36- if ( ! entry . hasReplicator ) {
37- db . delete ( key )
38- }
41+ setTimeout ( function ( ) {
42+ if ( ! entry . hasReplicator ) {
43+ db . delete ( key )
44+ }
45+ } , 30000 ) . unref ( )
3946 } )
4047
4148 if ( dest ) {
@@ -67,6 +74,7 @@ function load (kv) {
6774
6875 function put ( req , reply ) {
6976 const key = req . key
77+ const sendData = genSendData ( key )
7078 var needReply = true
7179 var entry = db . get ( key ) || new Entry ( key )
7280
@@ -94,18 +102,36 @@ function load (kv) {
94102 if ( array ) {
95103 array . forEach ( ( stream ) => stream . push ( req . value ) )
96104 }
105+ }
106+
107+ function genSendData ( key ) {
108+ return sendData
97109
98110 function sendData ( peer , cb ) {
99111 if ( typeof cb !== 'function' ) {
100112 cb = bigError
101113 }
114+
115+ const entry = db . get ( key )
116+ if ( ! entry ) {
117+ cb ( )
118+ return
119+ }
120+
121+ const req = {
122+ ns : 'kv' ,
123+ cmd : 'put' ,
124+ key : entry . key ,
125+ value : entry . value
126+ }
127+
102128 upring . peerConn ( peer ) . request ( req , function ( err ) {
103129 if ( err ) {
104130 cb ( err )
105131 return
106132 }
107133
108- logger . info ( { key } , 'replicated key' )
134+ logger . debug ( { key, value : entry . value } , 'replicated key' )
109135
110136 cb ( )
111137 } )
0 commit comments