• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

leonchen83 / redis-replicator / #2187

07 Jun 2025 09:11AM UTC coverage: 69.535% (-0.5%) from 69.989%
#2187

push

leonchen83
redis-8.0

1 of 123 new or added lines in 13 files covered. (0.81%)

1 existing line in 1 file now uncovered.

6642 of 9552 relevant lines covered (69.54%)

0.7 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

57.14
/src/main/java/com/moilioncircle/redis/replicator/rdb/dump/parser/DefaultDumpValueParser.java
1
/*
2
 * Copyright 2016-2017 Leon Chen
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *     http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16

17
package com.moilioncircle.redis.replicator.rdb.dump.parser;
18

19
import static com.moilioncircle.redis.replicator.Constants.RDB_OPCODE_FUNCTION;
20
import static com.moilioncircle.redis.replicator.Constants.RDB_OPCODE_FUNCTION2;
21
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_HASH;
22
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_HASH_LISTPACK;
23
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_HASH_LISTPACK_EX;
24
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_HASH_METADATA;
25
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_HASH_ZIPLIST;
26
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_HASH_ZIPMAP;
27
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_LIST;
28
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_LIST_QUICKLIST;
29
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_LIST_QUICKLIST_2;
30
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_LIST_ZIPLIST;
31
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_MODULE;
32
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_MODULE_2;
33
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_SET;
34
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_SET_INTSET;
35
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_SET_LISTPACK;
36
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_STREAM_LISTPACKS;
37
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_STREAM_LISTPACKS_2;
38
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_STREAM_LISTPACKS_3;
39
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_STRING;
40
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_ZSET;
41
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_ZSET_2;
42
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_ZSET_LISTPACK;
43
import static com.moilioncircle.redis.replicator.Constants.RDB_TYPE_ZSET_ZIPLIST;
44

45
import java.io.IOException;
46
import java.io.UncheckedIOException;
47
import java.util.Objects;
48

49
import com.moilioncircle.redis.replicator.Replicator;
50
import com.moilioncircle.redis.replicator.event.EventListener;
51
import com.moilioncircle.redis.replicator.io.RedisInputStream;
52
import com.moilioncircle.redis.replicator.rdb.DefaultRdbValueVisitor;
53
import com.moilioncircle.redis.replicator.rdb.RdbValueVisitor;
54
import com.moilioncircle.redis.replicator.rdb.datatype.Function;
55
import com.moilioncircle.redis.replicator.rdb.datatype.KeyValuePair;
56
import com.moilioncircle.redis.replicator.rdb.datatype.KeyValuePairs;
57
import com.moilioncircle.redis.replicator.rdb.dump.datatype.DumpFunction;
58
import com.moilioncircle.redis.replicator.rdb.dump.datatype.DumpKeyValuePair;
59
import com.moilioncircle.redis.replicator.util.ByteArray;
60

61
/**
62
 * @author Leon Chen
63
 * @since 3.1.0
64
 */
65
public class DefaultDumpValueParser implements DumpValueParser {
66

67
    protected final Replicator replicator;
68
    protected final RdbValueVisitor valueVisitor;
69

70
    public DefaultDumpValueParser(Replicator replicator) {
1✔
71
        Objects.requireNonNull(replicator);
1✔
72
        this.replicator = replicator;
1✔
73
        this.valueVisitor = new DefaultRdbValueVisitor(replicator);
1✔
74
    }
1✔
75

76
    @Override
77
    public void parse(DumpKeyValuePair kv, EventListener listener) {
78
        Objects.requireNonNull(listener).onEvent(replicator, parse(kv));
1✔
79
    }
1✔
80
    
81
    @Override
82
    public void parse(DumpFunction function, EventListener listener) {
83
        Objects.requireNonNull(listener).onEvent(replicator, parse(function));
×
84
    }
×
85
    
86
    @Override
87
    public Function parse(DumpFunction function) {
88
        Objects.requireNonNull(function);
×
89
        try (RedisInputStream in = new RedisInputStream(new ByteArray(function.getSerialized()))) {
×
90
            int valueType = in.read();
×
91
            if (valueType == RDB_OPCODE_FUNCTION) {
×
92
                return valueVisitor.applyFunction(in, 0);
×
93
            } else if (valueType == RDB_OPCODE_FUNCTION2) {
×
94
                return valueVisitor.applyFunction2(in, 0);
×
95
            } else {
96
                throw new AssertionError("unexpected value type:" + valueType);
×
97
            }
98
        } catch (IOException e) {
×
99
            throw new UncheckedIOException(e);
×
100
        }
101
    }
102
    
103
    @Override
104
    public KeyValuePair<?, ?> parse(DumpKeyValuePair kv) {
105
        Objects.requireNonNull(kv);
1✔
106
        try (RedisInputStream in = new RedisInputStream(new ByteArray(kv.getValue()))) {
1✔
107
            int valueType = in.read();
1✔
108
            switch (valueType) {
1✔
109
                case RDB_TYPE_STRING:
110
                    return KeyValuePairs.string(kv, valueVisitor.applyString(in, 0));
1✔
111
                case RDB_TYPE_LIST:
112
                    return KeyValuePairs.list(kv, valueVisitor.applyList(in, 0));
1✔
113
                case RDB_TYPE_SET:
114
                    return KeyValuePairs.set(kv, valueVisitor.applySet(in, 0));
1✔
115
                case RDB_TYPE_SET_LISTPACK:
116
                    return KeyValuePairs.set(kv, valueVisitor.applySetListPack(in, 0));
1✔
117
                case RDB_TYPE_ZSET:
118
                    return KeyValuePairs.zset(kv, valueVisitor.applyZSet(in, 0));
1✔
119
                case RDB_TYPE_ZSET_2:
120
                    return KeyValuePairs.zset(kv, valueVisitor.applyZSet2(in, 0));
×
121
                case RDB_TYPE_HASH:
122
                    return KeyValuePairs.hash(kv, valueVisitor.applyHash(in, 0));
1✔
123
                case RDB_TYPE_HASH_ZIPMAP:
124
                    return KeyValuePairs.hash(kv, valueVisitor.applyHashZipMap(in, 0));
×
125
                case RDB_TYPE_LIST_ZIPLIST:
126
                    return KeyValuePairs.list(kv, valueVisitor.applyListZipList(in, 0));
×
127
                case RDB_TYPE_SET_INTSET:
128
                    return KeyValuePairs.set(kv, valueVisitor.applySetIntSet(in, 0));
1✔
129
                case RDB_TYPE_ZSET_ZIPLIST:
130
                    return KeyValuePairs.zset(kv, valueVisitor.applyZSetZipList(in, 0));
1✔
131
                case RDB_TYPE_ZSET_LISTPACK:
132
                    return KeyValuePairs.zset(kv, valueVisitor.applyZSetListPack(in, 0));
1✔
133
                case RDB_TYPE_HASH_ZIPLIST:
134
                    return KeyValuePairs.hash(kv, valueVisitor.applyHashZipList(in, 0));
1✔
135
                case RDB_TYPE_HASH_LISTPACK:
136
                    return KeyValuePairs.hash(kv, valueVisitor.applyHashListPack(in, 0));
1✔
137
                case RDB_TYPE_LIST_QUICKLIST:
138
                    return KeyValuePairs.list(kv, valueVisitor.applyListQuickList(in, 0));
1✔
139
                case RDB_TYPE_LIST_QUICKLIST_2:
140
                    return KeyValuePairs.list(kv, valueVisitor.applyListQuickList2(in, 0));
1✔
141
                case RDB_TYPE_MODULE:
142
                    return KeyValuePairs.module(kv, valueVisitor.applyModule(in, 0));
×
143
                case RDB_TYPE_MODULE_2:
144
                    return KeyValuePairs.module(kv, valueVisitor.applyModule2(in, 0));
×
145
                case RDB_TYPE_STREAM_LISTPACKS:
146
                    return KeyValuePairs.stream(kv, valueVisitor.applyStreamListPacks(in, 0));
1✔
147
                case RDB_TYPE_STREAM_LISTPACKS_2:
148
                    return KeyValuePairs.stream(kv, valueVisitor.applyStreamListPacks2(in, 0));
1✔
149
                case RDB_TYPE_STREAM_LISTPACKS_3:
150
                    return KeyValuePairs.stream(kv, valueVisitor.applyStreamListPacks3(in, 0));
1✔
151
                case RDB_TYPE_HASH_LISTPACK_EX:
NEW
152
                    return KeyValuePairs.ttlHash(kv, valueVisitor.applyHashListPackEx(in, 0));
×
153
                case RDB_TYPE_HASH_METADATA:
NEW
154
                    return KeyValuePairs.ttlHash(kv, valueVisitor.applyHashMetadata(in, 0));
×
155
                default:
156
                    throw new AssertionError("unexpected value type:" + valueType);
×
157
            }
158
        } catch (IOException e) {
1✔
159
            throw new UncheckedIOException(e);
×
160
        }
161
    }
162
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc