Skip to content

Commit 7621337

Browse files
author
chenby
committed
fix convert db bug
1 parent eb98bb0 commit 7621337

File tree

1 file changed

+27
-15
lines changed

1 file changed

+27
-15
lines changed

src/main/java/com/moilioncircle/redis/rdb/cli/ext/rdt/BackupRdbVisitor.java

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import java.io.OutputStream;
2323
import java.util.function.Supplier;
2424

25+
import org.jetbrains.annotations.NotNull;
26+
2527
import com.moilioncircle.redis.rdb.cli.cmd.Args;
2628
import com.moilioncircle.redis.rdb.cli.conf.Configure;
2729
import com.moilioncircle.redis.rdb.cli.glossary.Guard;
@@ -125,29 +127,39 @@ public DB applySelectDB(RedisInputStream in, int version) throws IOException {
125127
}
126128
} else {
127129
// skip
130+
DB prev;
128131
listener.setGuard(Guard.PASS);
129132
try {
130-
super.applySelectDB(in, version);
133+
prev = super.applySelectDB(in, version);
131134
} finally {
132135
listener.setGuard(Guard.SAVE);
133136
}
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);
137+
// save
138+
if (filter.contains(prev.getDbNumber())) {
139+
return generateDB(prev.getDbNumber(), goal);
140+
} else {
141+
return generateDB(prev.getDbNumber(), prev.getDbNumber());
147142
}
148143
}
149144
}
150-
145+
146+
private DB generateDB(long prev, long next) throws IOException {
147+
listener.setGuard(Guard.DRAIN);
148+
try {
149+
BaseRdbEncoder encoder = new BaseRdbEncoder();
150+
byte[] db = encoder.rdbSaveLen(next);
151+
// type
152+
listener.handle((byte) RDB_OPCODE_SELECTDB);
153+
// db
154+
listener.handle(db);
155+
156+
// set prev db number to avoid filter wrong data.
157+
return new DB(prev);
158+
} finally {
159+
listener.setGuard(Guard.SAVE);
160+
}
161+
}
162+
151163
@Override
152164
public DB applyResizeDB(RedisInputStream in, int version, ContextKeyValuePair context) throws IOException {
153165
listener.setGuard(Guard.DRAIN);

0 commit comments

Comments
 (0)