@@ -125,29 +125,39 @@ public DB applySelectDB(RedisInputStream in, int version) throws IOException {
125125 }
126126 } else {
127127 // skip
128+ DB prev ;
128129 listener .setGuard (Guard .PASS );
129130 try {
130- super .applySelectDB (in , version );
131+ prev = super .applySelectDB (in , version );
131132 } finally {
132133 listener .setGuard (Guard .SAVE );
133134 }
134-
135- // convert
136- listener .setGuard (Guard .DRAIN );
137- try {
138- BaseRdbEncoder encoder = new BaseRdbEncoder ();
139- byte [] db = encoder .rdbSaveLen (goal );
140- // type
141- listener .handle ((byte ) RDB_OPCODE_SELECTDB );
142- // db
143- listener .handle (db );
144- return new DB (goal );
145- } finally {
146- listener .setGuard (Guard .SAVE );
135+ // save
136+ if (filter .contains (prev .getDbNumber ())) {
137+ return generateDB (prev .getDbNumber (), goal );
138+ } else {
139+ return generateDB (prev .getDbNumber (), prev .getDbNumber ());
147140 }
148141 }
149142 }
150-
143+
144+ private DB generateDB (long prev , long next ) throws IOException {
145+ listener .setGuard (Guard .DRAIN );
146+ try {
147+ BaseRdbEncoder encoder = new BaseRdbEncoder ();
148+ byte [] db = encoder .rdbSaveLen (next );
149+ // type
150+ listener .handle ((byte ) RDB_OPCODE_SELECTDB );
151+ // db
152+ listener .handle (db );
153+
154+ // set prev db number to avoid filter wrong data.
155+ return new DB (prev );
156+ } finally {
157+ listener .setGuard (Guard .SAVE );
158+ }
159+ }
160+
151161 @ Override
152162 public DB applyResizeDB (RedisInputStream in , int version , ContextKeyValuePair context ) throws IOException {
153163 listener .setGuard (Guard .DRAIN );
0 commit comments