Skip to content

Commit

Permalink
fix convert db bug
Browse files Browse the repository at this point in the history
  • Loading branch information
chenby committed Jul 15, 2024
1 parent eb98bb0 commit 7621337
Showing 1 changed file with 27 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import java.io.OutputStream;
import java.util.function.Supplier;

import org.jetbrains.annotations.NotNull;

import com.moilioncircle.redis.rdb.cli.cmd.Args;
import com.moilioncircle.redis.rdb.cli.conf.Configure;
import com.moilioncircle.redis.rdb.cli.glossary.Guard;
Expand Down Expand Up @@ -125,29 +127,39 @@ public DB applySelectDB(RedisInputStream in, int version) throws IOException {
}
} else {
// skip
DB prev;
listener.setGuard(Guard.PASS);
try {
super.applySelectDB(in, version);
prev = super.applySelectDB(in, version);
} finally {
listener.setGuard(Guard.SAVE);
}

// convert
listener.setGuard(Guard.DRAIN);
try {
BaseRdbEncoder encoder = new BaseRdbEncoder();
byte[] db = encoder.rdbSaveLen(goal);
// type
listener.handle((byte) RDB_OPCODE_SELECTDB);
// db
listener.handle(db);
return new DB(goal);
} finally {
listener.setGuard(Guard.SAVE);
// save
if (filter.contains(prev.getDbNumber())) {
return generateDB(prev.getDbNumber(), goal);
} else {
return generateDB(prev.getDbNumber(), prev.getDbNumber());
}
}
}


private DB generateDB(long prev, long next) throws IOException {
listener.setGuard(Guard.DRAIN);
try {
BaseRdbEncoder encoder = new BaseRdbEncoder();
byte[] db = encoder.rdbSaveLen(next);
// type
listener.handle((byte) RDB_OPCODE_SELECTDB);
// db
listener.handle(db);

// set prev db number to avoid filter wrong data.
return new DB(prev);
} finally {
listener.setGuard(Guard.SAVE);
}
}

@Override
public DB applyResizeDB(RedisInputStream in, int version, ContextKeyValuePair context) throws IOException {
listener.setGuard(Guard.DRAIN);
Expand Down

0 comments on commit 7621337

Please sign in to comment.