Skip to content

Commit e137e3f

Browse files
committed
fix no response if cache hits
1 parent 6826c87 commit e137e3f

11 files changed

+37
-62
lines changed

gogo-server/pom.xml

+9-19
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>zenuo</groupId>
88
<artifactId>gogo</artifactId>
9-
<version>1.7.7</version>
9+
<version>1.7.8</version>
1010

1111
<packaging>jar</packaging>
1212

@@ -54,7 +54,7 @@
5454
<dependency>
5555
<groupId>org.jsoup</groupId>
5656
<artifactId>jsoup</artifactId>
57-
<version>1.12.1</version>
57+
<version>1.13.1</version>
5858
</dependency>
5959
<dependency>
6060
<groupId>com.lmax</groupId>
@@ -63,33 +63,23 @@
6363
</dependency>
6464
<dependency>
6565
<groupId>org.apache.logging.log4j</groupId>
66-
<artifactId>log4j-slf4j18-impl</artifactId>
67-
<version>2.14.0</version>
68-
</dependency>
69-
<dependency>
70-
<groupId>org.apache.logging.log4j</groupId>
71-
<artifactId>log4j-api</artifactId>
72-
<version>2.14.0</version>
73-
</dependency>
74-
<dependency>
75-
<groupId>org.apache.logging.log4j</groupId>
76-
<artifactId>log4j-core</artifactId>
66+
<artifactId>log4j-slf4j-impl</artifactId>
7767
<version>2.14.0</version>
7868
</dependency>
7969
<dependency>
8070
<groupId>com.fasterxml.jackson.core</groupId>
8171
<artifactId>jackson-databind</artifactId>
82-
<version>2.11.1</version>
72+
<version>2.12.1</version>
8373
</dependency>
8474
<dependency>
8575
<groupId>io.netty</groupId>
8676
<artifactId>netty-all</artifactId>
87-
<version>4.1.45.Final</version>
77+
<version>4.1.58.Final</version>
8878
</dependency>
8979
<dependency>
9080
<groupId>org.apache.commons</groupId>
9181
<artifactId>commons-pool2</artifactId>
92-
<version>2.8.0</version>
82+
<version>2.9.0</version>
9383
</dependency>
9484
<dependency>
9585
<groupId>org.apache.httpcomponents</groupId>
@@ -99,7 +89,7 @@
9989
<dependency>
10090
<groupId>org.ehcache</groupId>
10191
<artifactId>ehcache</artifactId>
102-
<version>3.8.1</version>
92+
<version>3.9.0</version>
10393
</dependency>
10494
<dependency>
10595
<groupId>org.testng</groupId>
@@ -110,7 +100,7 @@
110100
<dependency>
111101
<groupId>com.fasterxml.jackson.dataformat</groupId>
112102
<artifactId>jackson-dataformat-yaml</artifactId>
113-
<version>2.11.1</version>
103+
<version>2.12.1</version>
114104
</dependency>
115105
<dependency>
116106
<groupId>org.apache.commons</groupId>
@@ -126,7 +116,7 @@
126116
<dependency>
127117
<groupId>org.projectlombok</groupId>
128118
<artifactId>lombok</artifactId>
129-
<version>1.18.10</version>
119+
<version>1.18.16</version>
130120
<scope>provided</scope>
131121
</dependency>
132122
</dependencies>

gogo-server/src/main/java/zenuo/gogo/core/processor/ISearchResultProvider.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public interface ISearchResultProvider {
4040
* @param page 页码
4141
* @return 搜索结果
4242
*/
43-
default Optional<SearchResponse> readCache(ICacheService cacheService, String key, int page) {
43+
static Optional<SearchResponse> readCache(ICacheService cacheService, String key, int page) {
4444
//从缓存服务中读取
4545
final String cacheKey = String.format(Constants.KEY_SEARCH_RESPONSE_PATTERN, key.hashCode(), page);
4646
final Optional<byte[]> value = cacheService.get(cacheKey);
@@ -55,7 +55,7 @@ default Optional<SearchResponse> readCache(ICacheService cacheService, String ke
5555
* @param page 页码
5656
* @param searchResponse 搜索结果
5757
*/
58-
default void writeCache(ICacheService cacheService, String key, int page, SearchResponse searchResponse) {
58+
static void writeCache(ICacheService cacheService, String key, int page, SearchResponse searchResponse) {
5959
//序列化,键
6060
final String cacheKey = String.format(Constants.KEY_SEARCH_RESPONSE_PATTERN, key.hashCode(), page);
6161
//写入缓存

gogo-server/src/main/java/zenuo/gogo/core/processor/impl/GoogleSearchResultProviderImpl.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import java.nio.charset.StandardCharsets;
2323
import java.util.ArrayList;
2424
import java.util.List;
25-
import java.util.Optional;
2625
import java.util.ServiceLoader;
2726

2827
/**
@@ -94,7 +93,7 @@ public SearchResponse search(String key, int page) throws SearchException {
9493
.desc(videoResult.child(2).text())
9594
.build());
9695
}
97-
builder.entries(Optional.of(entries));
96+
builder.entries(entries);
9897
return builder.status(HttpResponseStatus.OK).build();
9998
}
10099

@@ -128,7 +127,6 @@ Document httpGet(final String key, final int page) throws IOException {
128127
private SearchResponse patternChanged(final SearchResponse.SearchResponseBuilder builder) {
129128
return builder.status(HttpResponseStatus.INTERNAL_SERVER_ERROR)
130129
.error("Please contact developer")
131-
.entries(Optional.empty())
132130
.build();
133131
}
134132
}

gogo-server/src/main/java/zenuo/gogo/core/processor/impl/SearchProcessorImpl.java

+4-9
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ public final class SearchProcessorImpl implements ISearchProcessor {
4040
public void process(ChannelHandlerContext ctx, FullHttpRequest request, QueryStringDecoder decoder, ResponseType responseType) {
4141
final List<String> keys = decoder.parameters().get("q");
4242
if (keys == null || "".equals(keys.get(0))) {
43-
4443
response(ctx,
4544
request,
4645
ResponseType.API,
@@ -58,26 +57,22 @@ public void process(ChannelHandlerContext ctx, FullHttpRequest request, QueryStr
5857
.status(HttpResponseStatus.BAD_REQUEST)
5958
.build();
6059
} else {
61-
// try to read cache
6260
final Optional<SearchResponse> cache = readCache(key, page);
6361
if (cache.isPresent()) {
64-
// if hit
6562
response = cache.get();
6663
} else {
67-
// if not hit
6864
for (ISearchResultProvider srp : searchResultProviders) {
6965
try {
7066
response = srp.search(key, page);
71-
if (response.getEntries().isPresent()) {
72-
// if response entries is not empty
67+
if (!response.getEntries().isEmpty()) {
7368
break;
7469
}
7570
} catch (Exception e) {
7671
log.error("exception {}", srp, e);
7772
}
7873
}
7974
// cache
80-
if (response != null && response.getEntries().isPresent()) {
75+
if (response != null && !response.getEntries().isEmpty()) {
8176
writeCache(key, page, response);
8277
}
8378
}
@@ -102,10 +97,10 @@ public void process(ChannelHandlerContext ctx, FullHttpRequest request, QueryStr
10297
}
10398

10499
private Optional<SearchResponse> readCache(String key, int page) {
105-
return searchResultProviders.get(0).readCache(cacheService, key, page);
100+
return ISearchResultProvider.readCache(cacheService, key, page);
106101
}
107102

108103
private void writeCache(String key, int page, SearchResponse searchResponse) {
109-
searchResultProviders.get(0).writeCache(cacheService, key, page, searchResponse);
104+
ISearchResultProvider.writeCache(cacheService, key, page, searchResponse);
110105
}
111106
}

gogo-server/src/main/java/zenuo/gogo/core/processor/impl/StartPageSearchResultProviderImpl.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import java.nio.charset.StandardCharsets;
2222
import java.util.ArrayList;
2323
import java.util.List;
24-
import java.util.Optional;
2524
import java.util.ServiceLoader;
2625

2726
/**
@@ -92,7 +91,7 @@ SearchResponse search0(String key, int page) throws SearchException {
9291
entryBuilder.desc(StringUtils.escapeHtmlEntities(p.text()));
9392
entries.add(entryBuilder.build());
9493
}
95-
builder.entries(Optional.of(entries));
94+
builder.entries(entries);
9695
return builder.status(HttpResponseStatus.OK).build();
9796
}
9897

@@ -120,7 +119,6 @@ Document httpPost(String key, int page) throws IOException {
120119
private SearchResponse patternChanged(final SearchResponse.SearchResponseBuilder builder) {
121120
return builder.status(HttpResponseStatus.INTERNAL_SERVER_ERROR)
122121
.error("Please contact developer")
123-
.entries(Optional.empty())
124122
.build();
125123
}
126124
}

gogo-server/src/main/java/zenuo/gogo/core/processor/impl/StaticProcessorImpl.java

-3
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,17 @@ public void process(ChannelHandlerContext ctx, FullHttpRequest request, QueryStr
3434
log.error("process static '{}' error", path, e);
3535
throw new RuntimeException(e);
3636
}
37-
//响应对象
3837
final DefaultFullHttpResponse response = new DefaultFullHttpResponse(
3938
request.protocolVersion(),
4039
HttpResponseStatus.OK,
4140
Unpooled.copiedBuffer(bytes));
42-
//设置头信息
4341
response.headers().add(HttpHeaderNames.SERVER, "gogo");
4442
response.headers().add(HttpHeaderNames.CACHE_CONTROL, "private, max-age=120");
4543
if (path.endsWith(".js")) {
4644
response.headers().add(HttpHeaderNames.CONTENT_TYPE, "text/javascript");
4745
} else {
4846
response.headers().add(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.FILE);
4947
}
50-
//响应后关闭通道
5148
ctx.writeAndFlush(response)
5249
.addListener(ChannelFutureListener.CLOSE);
5350
}

gogo-server/src/main/java/zenuo/gogo/model/SearchResponse.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@
88
import lombok.NoArgsConstructor;
99
import lombok.Setter;
1010

11-
import java.util.Collections;
11+
import java.util.LinkedList;
1212
import java.util.List;
13-
import java.util.Optional;
1413

1514
@Builder
1615
@AllArgsConstructor
@@ -22,7 +21,7 @@ public final class SearchResponse implements IResponse {
2221
private Integer page;
2322
private Long amount;
2423
private Float elapsed;
25-
private Optional<List<Entry>> entries;
24+
private List<Entry> entries = new LinkedList<>();
2625
private String error;
2726
@JsonIgnore
2827
private HttpResponseStatus status;

gogo-server/src/main/java/zenuo/gogo/web/ResultPageBuilder.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ public byte[] build(IResponse iResponse) {
120120
sb.append(HTML_AFTER_STYLE)
121121
.append(entitiesEscapedKey)
122122
.append(HTML_BEFORE_RESULT);
123-
if (response.getEntries().isPresent()) {
124-
response.getEntries().get().forEach(e -> EntryBuilder.build(sb, e));
123+
if (!response.getEntries().isEmpty()) {
124+
response.getEntries().forEach(e -> EntryBuilder.build(sb, e));
125125
NextBuilder.build(sb, response.getKey(), response.getPage());
126126
} else {
127127
sb.append(String.format(HTML_ERROR, URLEncoder.encode(response.getKey(), StandardCharsets.UTF_8)));
+13-15
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,31 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<Configuration status="WARN">
2+
<Configuration status="WARN" monitorInterval="5">
33
<Properties>
4-
<property name="PATTERN">%d [%t] %-5level %logger{36} - %msg%n</property>
5-
<Property name="filename">./log/gogo.log</Property>
4+
<Property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss} %5p [%t] %logger{1.} - %m%n</Property>
5+
<Property name="LOG_FILE_DIRECTORY">./logs</Property>
66
</Properties>
7-
7+
88
<Appenders>
99
<Console name="Console" target="SYSTEM_OUT">
10-
<PatternLayout pattern="${PATTERN}"/>
10+
<PatternLayout pattern="${PATTERN}" charset="UTF-8"/>
1111
</Console>
1212

13-
<RollingRandomAccessFile name="File" filePattern="${filename}.%d.log.gz">
14-
<PatternLayout pattern="${PATTERN}"/>
13+
<RollingRandomAccessFile name="File"
14+
fileName="${LOG_FILE_DIRECTORY}/gogo.log"
15+
filePattern="${LOG_FILE_DIRECTORY}/gogo-%d{yyyy-MM-dd}-%i.log.gz">
16+
<PatternLayout pattern="${PATTERN}" charset="UTF-8"/>
1517
<Policies>
1618
<TimeBasedTriggeringPolicy />
19+
<SizeBasedTriggeringPolicy size="128 MB"/>
1720
</Policies>
1821
</RollingRandomAccessFile>
1922
</Appenders>
20-
23+
2124
<Loggers>
22-
<Root level="INFO">
25+
<Root level="INFO" includeLocation="false">
2326
<AppenderRef ref="Console"/>
2427
<AppenderRef ref="File"/>
2528
</Root>
26-
27-
<AsyncLogger name="gogo" additivity="false">
28-
<AppenderRef ref="Console"/>
29-
<AppenderRef ref="File"/>
30-
</AsyncLogger>
3129
</Loggers>
32-
30+
3331
</Configuration>

gogo-server/src/test/java/zenuo/gogo/core/processor/impl/GoogleSearchResultProviderImplTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ public void request() throws IOException {
2929
@Test
3030
public void search() throws SearchException {
3131
final SearchResponse response = searchResultProvider.search("udp", 1);
32-
if (response.getEntries().isPresent()) {
33-
response.getEntries().get().forEach(e -> System.out.println(e.getName()));
32+
if (!response.getEntries().isEmpty()) {
33+
response.getEntries().forEach(e -> System.out.println(e.getName()));
3434
}
3535
}
3636

gogo-server/src/test/java/zenuo/gogo/model/SearchResponseTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ public class SearchResponseTest {
1919
public void deserialize() throws IOException {
2020
final String json = "{\"key\":\"LRU\",\"page\":1,\"amount\":5490000,\"elapsed\":0.46,\"entries\":[{\"name\":\"Cache replacement policies - Wikipedia\",\"url\":\"https://en.wikipedia.org/wiki/Cache_replacement_policies\",\"desc\":\"In computing, cache algorithms are optimizing instructions, or algorithms, that a computer ... Even worse, many cache algorithms (in particular, LRU) allow this streaming data to fill the cache, pushing out of the cache information that will be ...\"}]}";
2121
final SearchResponse searchResponse = JsonUtils.fromJsonBytes(json.getBytes(StandardCharsets.UTF_8), SearchResponse.class);
22-
Assert.assertEquals(searchResponse.getEntries().get().size(), 1);
22+
Assert.assertEquals(searchResponse.getEntries().size(), 1);
2323
}
2424
}

0 commit comments

Comments
 (0)