Skip to content

Commit 544561d

Browse files
authored
Merge pull request #705 from clj-commons/add-brotli-and-zstd-deps
Include Brotli and Zstd deps - 🎄
2 parents b5794d4 + f7df2f7 commit 544561d

File tree

4 files changed

+70
-93
lines changed

4 files changed

+70
-93
lines changed

deps.edn

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,21 @@
2929
io.netty/netty-resolver {:mvn/version "4.1.100.Final"},
3030
io.netty/netty-resolver-dns {:mvn/version "4.1.100.Final"},
3131
metosin/malli
32-
{:mvn/version "0.10.4", :exclusions [org.clojure/clojure]}},
32+
{:mvn/version "0.10.4", :exclusions [org.clojure/clojure]},
33+
com.aayushatharva.brotli4j/brotli4j {:mvn/version "1.12.0"},
34+
com.aayushatharva.brotli4j/service {:mvn/version "1.12.0"},
35+
com.aayushatharva.brotli4j/native-linux-aarch64
36+
{:mvn/version "1.12.0"},
37+
com.aayushatharva.brotli4j/native-linux-armv7
38+
{:mvn/version "1.12.0"},
39+
com.aayushatharva.brotli4j/native-linux-x86_64
40+
{:mvn/version "1.12.0"},
41+
com.aayushatharva.brotli4j/native-osx-aarch64
42+
{:mvn/version "1.12.0"},
43+
com.aayushatharva.brotli4j/native-osx-x86_64 {:mvn/version "1.12.0"},
44+
com.aayushatharva.brotli4j/native-windows-x86_64
45+
{:mvn/version "1.12.0"},
46+
com.github.luben/zstd-jni {:mvn/version "1.5.5-7"}},
3347
:aliases
3448
{:lein2deps
3549
{:deps

project.clj

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -27,41 +27,41 @@
2727
[io.netty/netty-handler-proxy ~netty-version]
2828
[io.netty/netty-resolver ~netty-version]
2929
[io.netty/netty-resolver-dns ~netty-version]
30-
[metosin/malli "0.10.4" :exclusions [org.clojure/clojure]]]
31-
:profiles {:dev {:dependencies [[criterium "0.4.6"]
32-
[cheshire "5.10.0"]
33-
[org.slf4j/slf4j-simple "1.7.30"]
34-
[com.cognitect/transit-clj "1.0.324"]
35-
[spootnik/signal "0.2.4"]
36-
;; This is for dev and testing ONLY, not recommended for prod
37-
[org.bouncycastle/bcprov-jdk18on "1.75"]
38-
[org.bouncycastle/bcpkix-jdk18on "1.75"]
39-
;;[org.bouncycastle/bctls-jdk18on "1.75"]
40-
[io.netty/netty-tcnative-boringssl-static "2.0.61.Final"]
41-
;;[com.aayushatharva.brotli4j/all ~brotli-version]
42-
[com.aayushatharva.brotli4j/brotli4j ~brotli-version]
43-
[com.aayushatharva.brotli4j/service ~brotli-version]
44-
[com.aayushatharva.brotli4j/native-linux-aarch64 ~brotli-version]
45-
[com.aayushatharva.brotli4j/native-linux-armv7 ~brotli-version]
46-
[com.aayushatharva.brotli4j/native-linux-x86_64 ~brotli-version]
47-
[com.aayushatharva.brotli4j/native-osx-aarch64 ~brotli-version]
48-
[com.aayushatharva.brotli4j/native-osx-x86_64 ~brotli-version]
49-
[com.aayushatharva.brotli4j/native-windows-x86_64 ~brotli-version]
50-
[com.github.luben/zstd-jni "1.5.5-7"]]
51-
:jvm-opts ["-Dorg.slf4j.simpleLogger.defaultLogLevel=debug"
52-
"-Dorg.slf4j.simpleLogger.showThreadName=false"
53-
"-Dorg.slf4j.simpleLogger.showThreadId=true"
54-
"-Dorg.slf4j.simpleLogger.showLogName=false"
55-
"-Dorg.slf4j.simpleLogger.showShortLogName=true"
56-
"-Dorg.slf4j.simpleLogger.showDateTime=true"
57-
"-Dorg.slf4j.simpleLogger.log.io.netty.util=error"
58-
"-Dorg.slf4j.simpleLogger.log.io.netty.channel=warn"]}
59-
:test {:jvm-opts ["-Dorg.slf4j.simpleLogger.defaultLogLevel=off"]}
30+
[metosin/malli "0.10.4" :exclusions [org.clojure/clojure]]
31+
;;[com.aayushatharva.brotli4j/all ~brotli-version]
32+
[com.aayushatharva.brotli4j/brotli4j ~brotli-version]
33+
[com.aayushatharva.brotli4j/service ~brotli-version]
34+
[com.aayushatharva.brotli4j/native-linux-aarch64 ~brotli-version]
35+
[com.aayushatharva.brotli4j/native-linux-armv7 ~brotli-version]
36+
[com.aayushatharva.brotli4j/native-linux-x86_64 ~brotli-version]
37+
[com.aayushatharva.brotli4j/native-osx-aarch64 ~brotli-version]
38+
[com.aayushatharva.brotli4j/native-osx-x86_64 ~brotli-version]
39+
[com.aayushatharva.brotli4j/native-windows-x86_64 ~brotli-version]
40+
[com.github.luben/zstd-jni "1.5.5-7"]]
41+
:profiles {:dev {:dependencies [[criterium "0.4.6"]
42+
[cheshire "5.10.0"]
43+
[org.slf4j/slf4j-simple "1.7.30"]
44+
[com.cognitect/transit-clj "1.0.324"]
45+
[spootnik/signal "0.2.4"]
46+
;; This is for dev and testing ONLY, not recommended for prod
47+
[org.bouncycastle/bcprov-jdk18on "1.75"]
48+
[org.bouncycastle/bcpkix-jdk18on "1.75"]
49+
;;[org.bouncycastle/bctls-jdk18on "1.75"]
50+
[io.netty/netty-tcnative-boringssl-static "2.0.61.Final"]]
51+
:jvm-opts ["-Dorg.slf4j.simpleLogger.defaultLogLevel=debug"
52+
"-Dorg.slf4j.simpleLogger.showThreadName=false"
53+
"-Dorg.slf4j.simpleLogger.showThreadId=true"
54+
"-Dorg.slf4j.simpleLogger.showLogName=false"
55+
"-Dorg.slf4j.simpleLogger.showShortLogName=true"
56+
"-Dorg.slf4j.simpleLogger.showDateTime=true"
57+
"-Dorg.slf4j.simpleLogger.log.io.netty.util=error"
58+
"-Dorg.slf4j.simpleLogger.log.io.netty.channel=warn"]}
59+
:test {:jvm-opts ["-Dorg.slf4j.simpleLogger.defaultLogLevel=off"]}
6060
:leak-level-paranoid {:jvm-opts ["-Dio.netty.leakDetectionLevel=PARANOID"]}
61-
:pedantic {:pedantic? :abort}
62-
:trace {:jvm-opts ["-Dorg.slf4j.simpleLogger.defaultLogLevel=trace"]}
63-
:profile {:dependencies [[com.clojure-goes-fast/clj-async-profiler "1.1.1"]]
64-
:jvm-opts ["-Djdk.attach.allowAttachSelf"]}}
61+
:pedantic {:pedantic? :abort}
62+
:trace {:jvm-opts ["-Dorg.slf4j.simpleLogger.defaultLogLevel=trace"]}
63+
:profile {:dependencies [[com.clojure-goes-fast/clj-async-profiler "1.1.1"]]
64+
:jvm-opts ["-Djdk.attach.allowAttachSelf"]}}
6565
:java-source-paths ["src-java"]
6666
:test-selectors {:default #(not
6767
(some #{:benchmark :stress}

src-java/aleph/http/AlephCompressionOptions.java

Lines changed: 0 additions & 42 deletions
This file was deleted.

src/aleph/http/compression.clj

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,33 @@
11
(ns ^:no-doc aleph.http.compression
2-
"Currently only for HTTP/2, since Netty offers better support for
3-
compression in HTTP/1 code.
2+
"Currently focused on HTTP/2, since Netty offers better support for
3+
compression in its HTTP/1 code.
44
55
Best supported compression codecs on the web are Brotli, gzip, and deflate.
66
77
Snappy is primarily an internal Google codec, but is supported by some
88
open-source databases. It's not on track to be a web standard, but is
99
well-supported by Netty.
1010
11-
Zstd is a Facebook codec that is registered with IANA, but is not yet
12-
widely available. (See https://caniuse.com/zstd).
11+
Zstd is a promising Facebook codec that is registered with IANA, but is not
12+
yet widely available. (See https://caniuse.com/zstd).
1313
1414
See https://www.iana.org/assignments/http-parameters/http-parameters.xml#content-coding"
1515
(:require
1616
[aleph.netty :as netty]
1717
[clj-commons.primitive-math :as p]
1818
[clojure.tools.logging :as log])
1919
(:import
20-
(aleph.http AlephCompressionOptions)
2120
(io.netty.channel ChannelHandler)
2221
(io.netty.handler.codec.compression
2322
Brotli
24-
BrotliOptions CompressionOptions
23+
BrotliOptions
24+
CompressionOptions
2525
DeflateOptions
2626
GzipOptions
2727
SnappyOptions
28-
Zstd ZstdOptions)
28+
StandardCompressionOptions
29+
Zstd
30+
ZstdOptions)
2931
(io.netty.handler.codec.http HttpHeaderNames)
3032
(io.netty.handler.codec.http2 Http2HeadersFrame)
3133
(io.netty.util AsciiString)
@@ -36,6 +38,10 @@
3638
(def ^:private ^AsciiString head-method (AsciiString. "HEAD"))
3739
(def ^:private ^AsciiString connect-method (AsciiString. "CONNECT"))
3840

41+
;; From 0.7.0-rc2 on, Brotli and Zstd should be available by default
42+
(Brotli/ensureAvailability)
43+
(Zstd/ensureAvailability)
44+
3945
(defn- contains-class?
4046
"Returns true if the class is in the array"
4147
[^"[Lio.netty.handler.codec.compression.CompressionOptions;" a ^Class klazz]
@@ -51,11 +57,11 @@
5157
available-compressor-options
5258
"A Java array of all available compressor options"
5359
(into-array CompressionOptions
54-
(cond-> [(AlephCompressionOptions/deflate)
55-
(AlephCompressionOptions/gzip)
56-
(AlephCompressionOptions/snappy)]
57-
(Brotli/isAvailable) (conj (AlephCompressionOptions/brotli))
58-
(Zstd/isAvailable) (conj (AlephCompressionOptions/zstd)))))
60+
[(StandardCompressionOptions/brotli)
61+
(StandardCompressionOptions/deflate)
62+
(StandardCompressionOptions/gzip)
63+
(StandardCompressionOptions/zstd)
64+
(StandardCompressionOptions/snappy)]))
5965

6066

6167
(defn- qvalue
@@ -116,12 +122,10 @@
116122

117123
;; no named encodings were listed, so we'll apply *'s qval to unset ones
118124
(p/> star 0.0)
119-
(cond (and (p/== br -1.0)
120-
(Brotli/isAvailable))
125+
(cond (p/== br -1.0)
121126
"br"
122127

123-
(and (p/== zstd -1.0)
124-
(Zstd/isAvailable))
128+
(p/== zstd -1.0)
125129
"zstd"
126130

127131
(p/== snappy -1.0)
@@ -215,6 +219,7 @@
215219
(p/== 204 status)
216220
(p/== 304 status)))
217221
(log/debug "Setting content-encoding to:" @encoding)
222+
;; TODO: add "vary" header
218223
(.set headers HttpHeaderNames/CONTENT_ENCODING chosen-encoding))))))
219224

220225
(.write ctx msg promise))))))

0 commit comments

Comments
 (0)