Skip to content

Commit 001079a

Browse files
committed
Merge remote-tracking branch 'origin/master' into dev
# Conflicts: # src/main/resources/.version
2 parents cf5fe7c + f3fba93 commit 001079a

3 files changed

Lines changed: 30 additions & 16 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
### 0.9.6
2+
3+
Fix `rdt` convert db bug.
4+
15
### 0.9.5
26

37
Fix full sync offset bug. this bug could cause losing data in reconnection

DockerfileNative

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
FROM springci/graalvm-ce:java11-0.12.x AS builder
22

3-
ARG MAVEN_VERSION=3.9.4
3+
ARG MAVEN_VERSION=3.9.8
44
ARG BASE_URL=https://ftp.yz.yamagata-u.ac.jp/pub/network/apache/maven/maven-3/${MAVEN_VERSION}/binaries
55

66
WORKDIR /app

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

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)