mirror of https://github.com/halo-dev/halo
![]() #### What type of PR is this? /kind cleanup /area core /milestone 2.9.x #### What this PR does / why we need it: Before this, If we use a file with length less than 256KB for recovery, the process remains stagnant until we cancel the request. This PR refactors the transformation between data buffers and input stream and resolve the issue above. We should avoid returning InputStream directly in reactive stream. - DataBufferUtils before ```java public static InputStream toInputStream(Flux<DataBuffer> content) throws IOException { var pos = new PipedOutputStream(); var pis = new PipedInputStream(pos); write(content, pos) .doOnComplete(() -> { try { pos.close(); } catch (IOException ignored) { // Ignore the error } }) .subscribeOn(Schedulers.boundedElastic()) .subscribe(releaseConsumer(), error -> { if (error instanceof IOException) { // Ignore the error return; } log.error("Failed to write DataBuffer into OutputStream", error); }); return pis; ``` - DataBufferUtils after ```java public static Mono<InputStream> toInputStream(Publisher<DataBuffer> content, Scheduler scheduler) { return Mono.create(sink -> { try { var pos = new PipedOutputStream(); var pis = new PipedInputStream(pos); var disposable = write(content, pos) .subscribeOn(scheduler) .subscribe(releaseConsumer(), sink::error, () -> FileUtils.closeQuietly(pos), Context.of(sink.contextView())); sink.onDispose(disposable); sink.success(pis); } catch (IOException e) { sink.error(e); } }); ``` #### Special notes for your reviewer: Please test for plugins, themes and migrations. #### Does this PR introduce a user-facing change? ```release-note 解决备份恢复时因文件小于 256KB 而导致接口卡住的问题。 ``` |
||
---|---|---|
.github | ||
api | ||
application | ||
buildSrc | ||
config/checkstyle | ||
console | ||
docs | ||
gradle/wrapper | ||
hack | ||
platform | ||
.dockerignore | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
CODE_OF_CONDUCT.md | ||
CONTRIBUTING.md | ||
Dockerfile | ||
LICENSE | ||
OWNERS | ||
README.md | ||
SECURITY.md | ||
gradle.properties | ||
gradlew | ||
gradlew.bat | ||
settings.gradle |
README.md
Halo [ˈheɪloʊ],强大易用的开源建站工具。
快速开始
docker run \
-it -d \
--name halo \
-p 8090:8090 \
-v ~/.halo2:/root/.halo2 \
halohub/halo:2.8 \
--halo.security.initializer.superadminusername=admin \
--halo.security.initializer.superadminpassword=P@88w0rd
以上仅作为体验使用,详细部署文档请查阅:https://docs.halo.run/getting-started/install/docker-compose
在线体验
- 环境地址:https://demo.halo.run
- 后台地址:https://demo.halo.run/console
- 用户名:
demo
- 密码:
P@ssw0rd123..
生态
可访问 官方应用市场 或 awesome-halo 仓库 查看已经适用于 Halo 2.x 的主题和插件,以及适用于 Halo 1.x 的相关仓库。
许可证
Halo 使用 GPL-v3.0 协议开源,请遵守开源协议。
赞助
如果 Halo 对你有帮助,欢迎赞助我们,感谢以下赞助者对 Halo 项目的支持:
贡献
参考 CONTRIBUTING。