Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

deflate: Faster/efficient low level encoders #105

Merged
merged 62 commits into from
Oct 10, 2019

Conversation

klauspost
Copy link
Owner

@klauspost klauspost commented May 22, 2019

Refactor level 1-6 to skip more checks, but do intermediate hashes and extend matches backwards.

Added possibility to reuse Huffman tables across blocks.

Same or better compression at same or better speed. Removes assembler since it provides little gain.

Decompression should also be faster by this change.

Comparisons before / after / standard library:

file	out	level	insize	outsize	millis	mb/s
github-june-2days-2019.json	gzkp	1	6273951764	1233550316	29499	202.83
github-june-2days-2019.json	gzkp	2	6273951764	1164067066	29608	202.08
github-june-2days-2019.json	gzkp	3	6273951764	1140920272	30792	194.31
github-june-2days-2019.json	gzkp	4	6273951764	1089529065	31505	189.91
github-june-2days-2019.json	gzkp	5	6273951764	1022789520	35832	166.98
github-june-2days-2019.json	gzkp	6	6273951764	1001037718	37812	158.24
github-june-2days-2019.json	gzkp	7	6273951764	933934368	49006	122.09
github-june-2days-2019.json	gzkp	8	6273951764	920223522	57953	103.24
github-june-2days-2019.json	gzkp	9	6273951764	898814875	85343	70.11

github-june-2days-2019.json	gzkp	1	6273951764	1150816630	19144	312.54
github-june-2days-2019.json	gzkp	2	6273951764	1112997952	21914	273.02
github-june-2days-2019.json	gzkp	3	6273951764	1103339187	27355	218.73
github-june-2days-2019.json	gzkp	4	6273951764	997880134	31485	190.04
github-june-2days-2019.json	gzkp	5	6273951764	963159098	36553	163.69
github-june-2days-2019.json	gzkp	6	6273951764	949542385	42625	140.37
github-june-2days-2019.json	gzkp	7	6273951764	934872037	51287	116.66
github-june-2days-2019.json	gzkp	8	6273951764	921116719	60071	99.60
github-june-2days-2019.json	gzkp	9	6273951764	899793019	88437	67.66

github-june-2days-2019.json	gzstd	1	6273951764	1164400847	30404	196.79
github-june-2days-2019.json	gzstd	2	6273951764	1037528688	34734	172.26
github-june-2days-2019.json	gzstd	3	6273951764	1020812110	36892	162.18
github-june-2days-2019.json	gzstd	4	6273951764	952727133	67801	88.25
github-june-2days-2019.json	gzstd	5	6273951764	919596052	78215	76.50
github-june-2days-2019.json	gzstd	6	6273951764	902945741	88566	67.56
github-june-2days-2019.json	gzstd	7	6273951764	900517524	97541	61.34
github-june-2days-2019.json	gzstd	8	6273951764	898828139	108785	55.00
github-june-2days-2019.json	gzstd	9	6273951764	898811506	113991	52.49

file	out	level	insize	outsize	millis	mb/s
github-ranks-backup.bin	gzkp	1	1862623243	452407582	10908	162.83
github-ranks-backup.bin	gzkp	2	1862623243	449389786	11501	154.45
github-ranks-backup.bin	gzkp	3	1862623243	446879961	11721	151.54
github-ranks-backup.bin	gzkp	4	1862623243	444150557	12313	144.25
github-ranks-backup.bin	gzkp	5	1862623243	437333244	14976	118.61
github-ranks-backup.bin	gzkp	6	1862623243	435028834	16519	107.53
github-ranks-backup.bin	gzkp	7	1862623243	431332505	19354	91.78
github-ranks-backup.bin	gzkp	8	1862623243	428923857	27849	63.78
github-ranks-backup.bin	gzkp	9	1862623243	438136451	91228	19.47

github-ranks-backup.bin	gzkp	1	1862623243	469585217	6825	260.25
github-ranks-backup.bin	gzkp	2	1862623243	453563299	7336	242.12
github-ranks-backup.bin	gzkp	3	1862623243	446001718	9698	183.16
github-ranks-backup.bin	gzkp	4	1862623243	439183570	10872	163.38
github-ranks-backup.bin	gzkp	5	1862623243	435748390	13036	136.25
github-ranks-backup.bin	gzkp	6	1862623243	435209408	14655	121.21
github-ranks-backup.bin	gzkp	7	1862623243	431365233	18888	94.04
github-ranks-backup.bin	gzkp	8	1862623243	428951496	27659	64.22
github-ranks-backup.bin	gzkp	9	1862623243	438181891	92067	19.29

github-ranks-backup.bin	gzstd	1	1862623243	449546999	11707	151.72
github-ranks-backup.bin	gzstd	2	1862623243	443778293	14374	123.58
github-ranks-backup.bin	gzstd	3	1862623243	444456426	16285	109.07
github-ranks-backup.bin	gzstd	4	1862623243	432399760	24209	73.37
github-ranks-backup.bin	gzstd	5	1862623243	428827179	29919	59.37
github-ranks-backup.bin	gzstd	6	1862623243	435545975	48415	36.69
github-ranks-backup.bin	gzstd	7	1862623243	436743994	75892	23.41
github-ranks-backup.bin	gzstd	8	1862623243	438136413	102137	17.39
github-ranks-backup.bin	gzstd	9	1862623243	438136413	101437	17.51

file	out	level	insize	outsize	millis	mb/s
10gb.tar	pgzip	1	10065157632	5251983556	11556	830.64
10gb.tar	pgzip	2	10065157632	5224157080	12272	782.18
10gb.tar	pgzip	3	10065157632	5089500447	12945	741.51
10gb.tar	pgzip	4	10065157632	5059083375	14030	684.12
10gb.tar	pgzip	5	10065157632	4924471749	26532	361.78
10gb.tar	pgzip	6	10065157632	4890992057	30727	312.39
10gb.tar	pgzip	7	10065157632	4848698271	42950	223.49
10gb.tar	pgzip	8	10065157632	4801076156	84123	114.10
10gb.tar	pgzip	9	10065157632	4778047788	137732	69.69

10gb.tar	pgzip	1	10065157632	5255144258	9904	969.17
10gb.tar	pgzip	2	10065157632	5153877477	10589	906.46
10gb.tar	pgzip	3	10065157632	5069743673	11739	817.65
10gb.tar	pgzip	4	10065157632	4966890855	12809	749.33
10gb.tar	pgzip	5	10065157632	4953877526	15283	628.06
10gb.tar	pgzip	6	10065157632	4916370576	16155	594.15
10gb.tar	pgzip	7	10065157632	4850345434	41038	233.90
10gb.tar	pgzip	8	10065157632	4802737235	86181	111.38
10gb.tar	pgzip	9	10065157632	4779665126	143806	66.75

file	out	level	insize	outsize	millis	mb/s
rawstudio-mint14.tar	pgzip	1	8558382592	4026402083	10371	786.99
rawstudio-mint14.tar	pgzip	2	8558382592	3976212218	11091	735.90
rawstudio-mint14.tar	pgzip	3	8558382592	3931011731	11086	736.24
rawstudio-mint14.tar	pgzip	4	8558382592	3899819225	11609	703.01
rawstudio-mint14.tar	pgzip	5	8558382592	3746940880	20144	405.16
rawstudio-mint14.tar	pgzip	6	8558382592	3722886463	21039	387.92
rawstudio-mint14.tar	pgzip	7	8558382592	3665723220	26123	312.44
rawstudio-mint14.tar	pgzip	8	8558382592	3648502357	32155	253.82
rawstudio-mint14.tar	pgzip	9	8558382592	3630022560	145133	56.24

rawstudio-mint14.tar	pgzip	1	8558382592	4041481351	8272	986.59
rawstudio-mint14.tar	pgzip	2	8558382592	3964454222	9050	901.86
rawstudio-mint14.tar	pgzip	3	8558382592	3894348918	10319	790.93
rawstudio-mint14.tar	pgzip	4	8558382592	3808407914	11597	703.76
rawstudio-mint14.tar	pgzip	5	8558382592	3789731010	13678	596.71
rawstudio-mint14.tar	pgzip	6	8558382592	3757135469	15418	529.36
rawstudio-mint14.tar	pgzip	7	8558382592	3670648248	22814	357.76
rawstudio-mint14.tar	pgzip	8	8558382592	3653516147	28658	284.80
rawstudio-mint14.tar	pgzip	9	8558382592	3635123386	145580	56.06

file	out	level	insize	outsize	millis	mb/s
silesia.tar	gzkp	1	211947520	83069164	1535	131.68
silesia.tar	gzkp	2	211947520	80548919	1648	122.58
silesia.tar	gzkp	3	211947520	77904018	1670	121.03
silesia.tar	gzkp	4	211947520	76547840	1764	114.52
silesia.tar	gzkp	5	211947520	73026519	2694	75.03
silesia.tar	gzkp	6	211947520	71903875	2908	69.50
silesia.tar	gzkp	7	211947520	70137418	3603	56.10
silesia.tar	gzkp	8	211947520	69353510	4832	41.83
silesia.tar	gzkp	9	211947520	68538929	12745	15.86

silesia.tar	gzkp	1	211947520	82683166	1167	173.16
silesia.tar	gzkp	2	211947520	79146203	1240	162.97
silesia.tar	gzkp	3	211947520	77008797	1505	134.27
silesia.tar	gzkp	4	211947520	72911069	1756	115.08
silesia.tar	gzkp	5	211947520	72233393	2064	97.89
silesia.tar	gzkp	6	211947520	71468948	2223	90.91
silesia.tar	gzkp	7	211947520	70212764	3421	59.07
silesia.tar	gzkp	8	211947520	69419155	4678	43.21
silesia.tar	gzkp	9	211947520	68609789	12907	15.66

silesia.tar	gzstd	1	211947520	80007735	1691	119.51
silesia.tar	gzstd	2	211947520	74478304	2697	74.93
silesia.tar	gzstd	3	211947520	73133380	3067	65.89
silesia.tar	gzstd	4	211947520	71101880	3756	53.80
silesia.tar	gzstd	5	211947520	69419270	5024	40.23
silesia.tar	gzstd	6	211947520	68903687	6404	31.56
silesia.tar	gzstd	7	211947520	68696446	7752	26.07
silesia.tar	gzstd	8	211947520	68531371	10442	19.36
silesia.tar	gzstd	9	211947520	68516066	13731	14.72

file	out	level	insize	outsize	millis	mb/s
enwik9	gzkp	1	1000000000	391051823	9143	104.30
enwik9	gzkp	2	1000000000	382532087	9720	98.11
enwik9	gzkp	3	1000000000	368232137	9810	97.20
enwik9	gzkp	4	1000000000	360358576	10509	90.75
enwik9	gzkp	5	1000000000	342561385	15336	62.19
enwik9	gzkp	6	1000000000	338082951	16439	58.01
enwik9	gzkp	7	1000000000	329228322	20577	46.35
enwik9	gzkp	8	1000000000	326599546	26169	36.44
enwik9	gzkp	9	1000000000	324191746	32319	29.51

enwik9	gzkp	1	1000000000	384456678	6679	142.78
enwik9	gzkp	2	1000000000	372262266	7206	132.33
enwik9	gzkp	3	1000000000	364294282	8569	111.28
enwik9	gzkp	4	1000000000	341904112	9578	99.57
enwik9	gzkp	5	1000000000	338375880	11304	84.36
enwik9	gzkp	6	1000000000	336071599	11819	80.69
enwik9	gzkp	7	1000000000	329248670	19444	49.04
enwik9	gzkp	8	1000000000	326623117	24830	38.41
enwik9	gzkp	9	1000000000	324205510	31146	30.62

enwik9	gzstd	1	1000000000	382578136	9819	97.12
enwik9	gzstd	2	1000000000	355281284	14734	64.72
enwik9	gzstd	3	1000000000	349139651	16378	58.23
enwik9	gzstd	4	1000000000	334224688	20090	47.47
enwik9	gzstd	5	1000000000	326654931	27233	35.02
enwik9	gzstd	6	1000000000	325043014	31512	30.26
enwik9	gzstd	7	1000000000	324585686	34230	27.86
enwik9	gzstd	8	1000000000	324196685	35532	26.84
enwik9	gzstd	9	1000000000	324191533	35661	26.74

file	out	level	insize	outsize	millis	mb/s
sharnd.out.2gb	gzkp	1	2147483647	2147647515	1430	1431.84
sharnd.out.2gb	gzkp	2	2147483647	2147647515	1537	1332.16
sharnd.out.2gb	gzkp	3	2147483647	2147647515	1540	1329.56
sharnd.out.2gb	gzkp	4	2147483647	2147647515	1455	1407.24
sharnd.out.2gb	gzkp	5	2147483647	2148139030	19630	104.33
sharnd.out.2gb	gzkp	6	2147483647	2148139030	19706	103.93
sharnd.out.2gb	gzkp	7	2147483647	2148139030	18356	111.57
sharnd.out.2gb	gzkp	8	2147483647	2148139030	18443	111.04
sharnd.out.2gb	gzkp	9	2147483647	2148139030	18380	111.42

sharnd.out.2gb	gzkp	1	2147483647	2147647515	494	4144.82
sharnd.out.2gb	gzkp	2	2147483647	2147647515	534	3834.34
sharnd.out.2gb	gzkp	3	2147483647	2147647515	506	4046.52
sharnd.out.2gb	gzkp	4	2147483647	2147647515	512	3999.10
sharnd.out.2gb	gzkp	5	2147483647	2147647515	543	3770.79
sharnd.out.2gb	gzkp	6	2147483647	2147647515	611	3351.13
sharnd.out.2gb	gzkp	7	2147483647	2148139030	15456	132.50
sharnd.out.2gb	gzkp	8	2147483647	2148139030	15454	132.52
sharnd.out.2gb	gzkp	9	2147483647	2148139030	15430	132.72

sharnd.out.2gb	gzstd	1	2147483647	2147647515	4151	493.26
sharnd.out.2gb	gzstd	2	2147483647	2148139030	36241	56.51
sharnd.out.2gb	gzstd	3	2147483647	2148139030	36233	56.52
sharnd.out.2gb	gzstd	4	2147483647	2148139030	37405	54.75
sharnd.out.2gb	gzstd	5	2147483647	2148139030	37251	54.98
sharnd.out.2gb	gzstd	6	2147483647	2148139030	37342	54.84
sharnd.out.2gb	gzstd	7	2147483647	2148139030	37328	54.86
sharnd.out.2gb	gzstd	8	2147483647	2148139030	37269	54.95
sharnd.out.2gb	gzstd	9	2147483647	2148139030	37214	55.03

Single files:

file	reset	out	level	files	insize	outsize	millis	mb/s
webdevdata.org-2015-01-07-subset	true	gzkp	1	53932	4015381096	883337928	21216	180.49
webdevdata.org-2015-01-07-subset	true	gzkp	2	53932	4015381096	864557739	23606	162.21
webdevdata.org-2015-01-07-subset	true	gzkp	3	53932	4015381096	847762606	29836	128.35
webdevdata.org-2015-01-07-subset	true	gzkp	4	53932	4015381096	827173263	24624	155.51
webdevdata.org-2015-01-07-subset	true	gzkp	5	53932	4015381096	797125571	30578	125.23
webdevdata.org-2015-01-07-subset	true	gzkp	6	53932	4015381096	781461720	31982	119.73
webdevdata.org-2015-01-07-subset	true	gzkp	7	53932	4015381096	754336095	41976	91.23
webdevdata.org-2015-01-07-subset	true	gzkp	8	53932	4015381096	746207793	68222	56.13
webdevdata.org-2015-01-07-subset	true	gzkp	9	53932	4015381096	730113177	100637	38.05

file	reset	out	level	files	insize	outsize	millis	mb/s
webdevdata.org-2015-01-07-subset	true	gzkp	1	53932	4015381096	876361031	17526	218.48
webdevdata.org-2015-01-07-subset	true	gzkp	2	53932	4015381096	853593728	19333	198.07
webdevdata.org-2015-01-07-subset	true	gzkp	3	53932	4015381096	838643217	21815	175.54
webdevdata.org-2015-01-07-subset	true	gzkp	4	53932	4015381096	794165757	23527	162.76
webdevdata.org-2015-01-07-subset	true	gzkp	5	53932	4015381096	779171564	27064	141.49
webdevdata.org-2015-01-07-subset	true	gzkp	6	53932	4015381096	772351071	30667	124.87
webdevdata.org-2015-01-07-subset	true	gzkp	7	53932	4015381096	754931995	39627	96.64
webdevdata.org-2015-01-07-subset	true	gzkp	8	53932	4015381096	746794532	47828	80.06
webdevdata.org-2015-01-07-subset	true	gzkp	9	53932	4015381096	730699988	101221	37.83

file	reset	out	level	files	insize	outsize	millis	mb/s
webdevdata.org-2015-01-07-subset	true	gzstd	1	53932	4015381096	862404198	22815	167.84
webdevdata.org-2015-01-07-subset	true	gzstd	2	53932	4015381096	813801603	29327	130.57
webdevdata.org-2015-01-07-subset	true	gzstd	3	53932	4015381096	800738515	31530	121.45
webdevdata.org-2015-01-07-subset	true	gzstd	4	53932	4015381096	765442481	50113	76.41
webdevdata.org-2015-01-07-subset	true	gzstd	5	53932	4015381096	744953036	59575	64.28
webdevdata.org-2015-01-07-subset	true	gzstd	6	53932	4015381096	735461494	69034	55.47
webdevdata.org-2015-01-07-subset	true	gzstd	7	53932	4015381096	733286905	78524	48.77
webdevdata.org-2015-01-07-subset	true	gzstd	8	53932	4015381096	730511680	96336	39.75
webdevdata.org-2015-01-07-subset	true	gzstd	9	53932	4015381096	730047678	113428	33.76

file	reset	out	level	files	insize	outsize	millis	mb/s
objectfiles	true	gzkp	1	708	300491980	57981161	1549	184.96
objectfiles	true	gzkp	2	708	300491980	55801013	1550	184.84
objectfiles	true	gzkp	3	708	300491980	54598487	1606	178.40
objectfiles	true	gzkp	4	708	300491980	52727592	1660	172.59
objectfiles	true	gzkp	5	708	300491980	50546196	1903	150.55
objectfiles	true	gzkp	6	708	300491980	48991412	2102	136.30
objectfiles	true	gzkp	7	708	300491980	46065753	2761	103.77
objectfiles	true	gzkp	8	708	300491980	45000384	3693	77.58
objectfiles	true	gzkp	9	708	300491980	43646078	12240	23.41

file	reset	out	level	files	insize	outsize	millis	mb/s
objectfiles	true	gzkp	1	708	300491980	58099795	1114	257.19
objectfiles	true	gzkp	2	708	300491980	54933794	1252	228.84
objectfiles	true	gzkp	3	708	300491980	54129430	1409	203.34
objectfiles	true	gzkp	4	708	300491980	48835394	1577	181.68
objectfiles	true	gzkp	5	708	300491980	47872981	1865	153.62
objectfiles	true	gzkp	6	708	300491980	46996978	2155	132.95
objectfiles	true	gzkp	7	708	300491980	46097456	2716	105.49
objectfiles	true	gzkp	8	708	300491980	45031737	3623	79.08
objectfiles	true	gzkp	9	708	300491980	43677505	12380	23.15

file	reset	out	level	files	insize	outsize	millis	mb/s
objectfiles	true	gzstd	1	708	300491980	55824627	1588	180.42
objectfiles	true	gzstd	2	708	300491980	51484078	1890	151.58
objectfiles	true	gzstd	3	708	300491980	50070468	2159	132.70
objectfiles	true	gzstd	4	708	300491980	47218573	3498	81.91
objectfiles	true	gzstd	5	708	300491980	45022837	4333	66.12
objectfiles	true	gzstd	6	708	300491980	44102174	5823	49.21
objectfiles	true	gzstd	7	708	300491980	43826141	8001	35.81
objectfiles	true	gzstd	8	708	300491980	43669774	11066	25.90
objectfiles	true	gzstd	9	708	300491980	43640920	13875	20.65

Refactor level 1+2 to skip more checks, but do intermediate hashes and extend matches backwards.

Same or better compression at same or better speed.
Mostly avoiding bounds checks.
Fix level 6 problem.
@klauspost klauspost changed the title deflate: Gap hashing and skip encoding deflate: Faster/efficient low level encoders Jun 12, 2019
@klauspost klauspost mentioned this pull request Aug 14, 2019
@klauspost klauspost merged commit 30993c6 into master Oct 10, 2019
@klauspost klauspost deleted the deflate-skip-lower-levels branch March 7, 2020 08:36
cyphar added a commit to cyphar/umoci that referenced this pull request Jun 18, 2020
We haven't done a dependency bump in quite a while, and there are a fair
few fixes and improvements we should get into umoci before the next
release.

  % go get -u
  go: github.com/apex/log upgrade => v1.4.0
  go: github.com/cpuguy83/go-md2man/v2 upgrade => v2.0.0
  go: github.com/golang/protobuf upgrade => v1.4.2
  go: github.com/klauspost/compress upgrade => v1.10.9
  go: github.com/klauspost/cpuid upgrade => v1.3.0
  go: github.com/klauspost/pgzip upgrade => v1.2.4
  go: github.com/konsorten/go-windows-terminal-sequences upgrade => v1.0.3
  go: github.com/opencontainers/go-digest upgrade => v1.0.0
  go: github.com/opencontainers/runtime-spec upgrade => v1.0.2
  go: github.com/pkg/errors upgrade => v0.9.1
  go: github.com/sirupsen/logrus upgrade => v1.6.0
  go: github.com/vbatts/go-mtree upgrade => v0.5.0
  go: golang.org/x/crypto upgrade => v0.0.0-20200604202706-70a84ac30bf9
  go: golang.org/x/net upgrade => v0.0.0-20200602114024-627f9648deb9
  go: golang.org/x/sys upgrade => v0.0.0-20200615200032-f1bc736245b1
  go: google.golang.org/protobuf upgrade => v1.24.0

However there are two issues with this update:

 * We cannot update github.com/urfave/cli to anything later than
   v1.22.1 because of a bug when it comes to StringSliceFlag parsing that we
   hit in CI[1] -- hence the new excludes block.

 * Updating github.com/klauspost/compress to anything later than v1.8.6 causes
   us to generate different gzip-compressed blobs due to an optimisation in
   their compression[2]. Since this is generally a good change to have, we have
   to update our CI so that it works with the newest version (even if it's
   sub-optimal to generate different bytes between versions).

[1]: urfave/cli#1152
[2]: klauspost/compress#105

Signed-off-by: Aleksa Sarai <asarai@suse.de>
cyphar added a commit to cyphar/umoci that referenced this pull request Jun 18, 2020
We haven't done a dependency bump in quite a while, and there are a fair
few fixes and improvements we should get into umoci before the next
release.

  % go get -u
  go: github.com/apex/log upgrade => v1.4.0
  go: github.com/cpuguy83/go-md2man/v2 upgrade => v2.0.0
  go: github.com/golang/protobuf upgrade => v1.4.2
  go: github.com/klauspost/compress upgrade => v1.10.9
  go: github.com/klauspost/cpuid upgrade => v1.3.0
  go: github.com/klauspost/pgzip upgrade => v1.2.4
  go: github.com/konsorten/go-windows-terminal-sequences upgrade => v1.0.3
  go: github.com/opencontainers/go-digest upgrade => v1.0.0
  go: github.com/opencontainers/runtime-spec upgrade => v1.0.2
  go: github.com/pkg/errors upgrade => v0.9.1
  go: github.com/sirupsen/logrus upgrade => v1.6.0
  go: github.com/vbatts/go-mtree upgrade => v0.5.0
  go: golang.org/x/crypto upgrade => v0.0.0-20200604202706-70a84ac30bf9
  go: golang.org/x/net upgrade => v0.0.0-20200602114024-627f9648deb9
  go: golang.org/x/sys upgrade => v0.0.0-20200615200032-f1bc736245b1
  go: google.golang.org/protobuf upgrade => v1.24.0

However there are two issues with this update:

 * We cannot update github.com/urfave/cli to anything later than
   v1.22.1 because of a bug when it comes to StringSliceFlag parsing that we
   hit in CI[1] -- hence the new excludes block.

 * Updating github.com/klauspost/compress to anything later than v1.8.6 causes
   us to generate different gzip-compressed blobs due to an optimisation in
   their compression[2]. Since this is generally a good change to have, we have
   to update our CI so that it works with the newest version (even if it's
   sub-optimal to generate different bytes between versions).

[1]: urfave/cli#1152
[2]: klauspost/compress#105

Signed-off-by: Aleksa Sarai <asarai@suse.de>
cyphar added a commit to cyphar/umoci that referenced this pull request Jun 18, 2020
We haven't done a dependency bump in quite a while, and there are a fair
few fixes and improvements we should get into umoci before the next
release.

  % go get -u
  go: github.com/apex/log upgrade => v1.4.0
  go: github.com/cpuguy83/go-md2man/v2 upgrade => v2.0.0
  go: github.com/golang/protobuf upgrade => v1.4.2
  go: github.com/klauspost/compress upgrade => v1.10.9
  go: github.com/klauspost/cpuid upgrade => v1.3.0
  go: github.com/klauspost/pgzip upgrade => v1.2.4
  go: github.com/konsorten/go-windows-terminal-sequences upgrade => v1.0.3
  go: github.com/opencontainers/go-digest upgrade => v1.0.0
  go: github.com/opencontainers/runtime-spec upgrade => v1.0.2
  go: github.com/pkg/errors upgrade => v0.9.1
  go: github.com/sirupsen/logrus upgrade => v1.6.0
  go: github.com/vbatts/go-mtree upgrade => v0.5.0
  go: golang.org/x/crypto upgrade => v0.0.0-20200604202706-70a84ac30bf9
  go: golang.org/x/net upgrade => v0.0.0-20200602114024-627f9648deb9
  go: golang.org/x/sys upgrade => v0.0.0-20200615200032-f1bc736245b1
  go: google.golang.org/protobuf upgrade => v1.24.0

However there are two issues with this update:

 * We cannot update github.com/urfave/cli to anything later than
   v1.22.1 because of a bug when it comes to StringSliceFlag parsing that we
   hit in CI[1] -- hence the new excludes block.

 * Updating github.com/klauspost/compress to anything later than v1.8.6 causes
   us to generate different gzip-compressed blobs due to an optimisation in
   their compression[2]. Since this is generally a good change to have, we have
   to update our CI so that it works with the newest version (even if it's
   sub-optimal to generate different bytes between versions).

[1]: urfave/cli#1152
[2]: klauspost/compress#105

Signed-off-by: Aleksa Sarai <asarai@suse.de>
cyphar added a commit to cyphar/umoci that referenced this pull request Jun 18, 2020
We haven't done a dependency bump in quite a while, and there are a fair
few fixes and improvements we should get into umoci before the next
release.

  % go get -u
  go: github.com/apex/log upgrade => v1.4.0
  go: github.com/cpuguy83/go-md2man/v2 upgrade => v2.0.0
  go: github.com/golang/protobuf upgrade => v1.4.2
  go: github.com/klauspost/compress upgrade => v1.10.9
  go: github.com/klauspost/cpuid upgrade => v1.3.0
  go: github.com/klauspost/pgzip upgrade => v1.2.4
  go: github.com/konsorten/go-windows-terminal-sequences upgrade => v1.0.3
  go: github.com/opencontainers/go-digest upgrade => v1.0.0
  go: github.com/opencontainers/runtime-spec upgrade => v1.0.2
  go: github.com/pkg/errors upgrade => v0.9.1
  go: github.com/sirupsen/logrus upgrade => v1.6.0
  go: github.com/vbatts/go-mtree upgrade => v0.5.0
  go: golang.org/x/crypto upgrade => v0.0.0-20200604202706-70a84ac30bf9
  go: golang.org/x/net upgrade => v0.0.0-20200602114024-627f9648deb9
  go: golang.org/x/sys upgrade => v0.0.0-20200615200032-f1bc736245b1
  go: google.golang.org/protobuf upgrade => v1.24.0

However there are two issues with this update:

 * We cannot update github.com/urfave/cli to anything later than
   v1.22.1 because of a bug when it comes to StringSliceFlag parsing that we
   hit in CI[1] -- hence the new excludes block.

 * Updating github.com/klauspost/compress to anything later than v1.8.6 causes
   us to generate different gzip-compressed blobs due to an optimisation in
   their compression[2]. Since this is generally a good change to have, we have
   to update our CI so that it works with the newest version (even if it's
   sub-optimal to generate different bytes between versions).

[1]: urfave/cli#1152
[2]: klauspost/compress#105

Signed-off-by: Aleksa Sarai <asarai@suse.de>
cyphar added a commit to cyphar/umoci that referenced this pull request Jun 19, 2020
We haven't done a dependency bump in quite a while, and there are a fair
few fixes and improvements we should get into umoci before the next
release.

  % go get -u
  go: github.com/apex/log upgrade => v1.4.0
  go: github.com/cpuguy83/go-md2man/v2 upgrade => v2.0.0
  go: github.com/golang/protobuf upgrade => v1.4.2
  go: github.com/klauspost/compress upgrade => v1.10.9
  go: github.com/klauspost/cpuid upgrade => v1.3.0
  go: github.com/klauspost/pgzip upgrade => v1.2.4
  go: github.com/konsorten/go-windows-terminal-sequences upgrade => v1.0.3
  go: github.com/opencontainers/go-digest upgrade => v1.0.0
  go: github.com/opencontainers/runtime-spec upgrade => v1.0.2
  go: github.com/pkg/errors upgrade => v0.9.1
  go: github.com/sirupsen/logrus upgrade => v1.6.0
  go: github.com/vbatts/go-mtree upgrade => v0.5.0
  go: golang.org/x/crypto upgrade => v0.0.0-20200604202706-70a84ac30bf9
  go: golang.org/x/net upgrade => v0.0.0-20200602114024-627f9648deb9
  go: golang.org/x/sys upgrade => v0.0.0-20200615200032-f1bc736245b1
  go: google.golang.org/protobuf upgrade => v1.24.0

However there are two issues with this update:

 * We cannot update github.com/urfave/cli to anything later than
   v1.22.1 because of a bug when it comes to StringSliceFlag parsing that we
   hit in CI[1] -- hence the new excludes block.

 * Updating github.com/klauspost/compress to anything later than v1.8.6 causes
   us to generate different gzip-compressed blobs due to an optimisation in
   their compression[2]. Since this is generally a good change to have, we have
   to update our CI so that it works with the newest version (even if it's
   sub-optimal to generate different bytes between versions).

[1]: urfave/cli#1152
[2]: klauspost/compress#105

Signed-off-by: Aleksa Sarai <asarai@suse.de>
cyphar added a commit to cyphar/umoci that referenced this pull request Jun 19, 2020
We haven't done a dependency bump in quite a while, and there are a fair
few fixes and improvements we should get into umoci before the next
release.

  % go get -u
  go: github.com/apex/log upgrade => v1.4.0
  go: github.com/cpuguy83/go-md2man/v2 upgrade => v2.0.0
  go: github.com/golang/protobuf upgrade => v1.4.2
  go: github.com/klauspost/compress upgrade => v1.10.9
  go: github.com/klauspost/cpuid upgrade => v1.3.0
  go: github.com/klauspost/pgzip upgrade => v1.2.4
  go: github.com/konsorten/go-windows-terminal-sequences upgrade => v1.0.3
  go: github.com/opencontainers/go-digest upgrade => v1.0.0
  go: github.com/opencontainers/runtime-spec upgrade => v1.0.2
  go: github.com/pkg/errors upgrade => v0.9.1
  go: github.com/sirupsen/logrus upgrade => v1.6.0
  go: github.com/vbatts/go-mtree upgrade => v0.5.0
  go: golang.org/x/crypto upgrade => v0.0.0-20200604202706-70a84ac30bf9
  go: golang.org/x/net upgrade => v0.0.0-20200602114024-627f9648deb9
  go: golang.org/x/sys upgrade => v0.0.0-20200615200032-f1bc736245b1
  go: google.golang.org/protobuf upgrade => v1.24.0

However there are two issues with this update:

 * We cannot update github.com/urfave/cli to anything later than
   v1.22.1 because of a bug when it comes to StringSliceFlag parsing that we
   hit in CI[1] -- hence the new excludes block.

 * Updating github.com/klauspost/compress to anything later than v1.8.6 causes
   us to generate different gzip-compressed blobs due to an optimisation in
   their compression[2]. Since this is generally a good change to have, we have
   to update our CI so that it works with the newest version (even if it's
   sub-optimal to generate different bytes between versions).

[1]: urfave/cli#1152
[2]: klauspost/compress#105

Signed-off-by: Aleksa Sarai <asarai@suse.de>
cyphar added a commit to cyphar/umoci that referenced this pull request Jun 19, 2020
We haven't done a dependency bump in quite a while, and there are a fair
few fixes and improvements we should get into umoci before the next
release.

  % go get -u
  go: github.com/apex/log upgrade => v1.4.0
  go: github.com/cpuguy83/go-md2man/v2 upgrade => v2.0.0
  go: github.com/golang/protobuf upgrade => v1.4.2
  go: github.com/klauspost/compress upgrade => v1.10.9
  go: github.com/klauspost/cpuid upgrade => v1.3.0
  go: github.com/klauspost/pgzip upgrade => v1.2.4
  go: github.com/konsorten/go-windows-terminal-sequences upgrade => v1.0.3
  go: github.com/opencontainers/go-digest upgrade => v1.0.0
  go: github.com/opencontainers/runtime-spec upgrade => v1.0.2
  go: github.com/pkg/errors upgrade => v0.9.1
  go: github.com/sirupsen/logrus upgrade => v1.6.0
  go: github.com/vbatts/go-mtree upgrade => v0.5.0
  go: golang.org/x/crypto upgrade => v0.0.0-20200604202706-70a84ac30bf9
  go: golang.org/x/net upgrade => v0.0.0-20200602114024-627f9648deb9
  go: golang.org/x/sys upgrade => v0.0.0-20200615200032-f1bc736245b1
  go: google.golang.org/protobuf upgrade => v1.24.0

However there are two issues with this update:

 * We cannot update github.com/urfave/cli to anything later than
   v1.22.1 because of a bug when it comes to StringSliceFlag parsing that we
   hit in CI[1] -- hence the new excludes block.

 * Updating github.com/klauspost/compress to anything later than v1.8.6 causes
   us to generate different gzip-compressed blobs due to an optimisation in
   their compression[2]. Since this is generally a good change to have, we have
   to update our CI so that it works with the newest version (even if it's
   sub-optimal to generate different bytes between versions).

[1]: urfave/cli#1152
[2]: klauspost/compress#105

Signed-off-by: Aleksa Sarai <asarai@suse.de>
cyphar added a commit to cyphar/umoci that referenced this pull request Jun 19, 2020
We haven't done a dependency bump in quite a while, and there are a fair
few fixes and improvements we should get into umoci before the next
release.

  % go get -u
  go: github.com/apex/log upgrade => v1.4.0
  go: github.com/cpuguy83/go-md2man/v2 upgrade => v2.0.0
  go: github.com/golang/protobuf upgrade => v1.4.2
  go: github.com/klauspost/compress upgrade => v1.10.9
  go: github.com/klauspost/cpuid upgrade => v1.3.0
  go: github.com/klauspost/pgzip upgrade => v1.2.4
  go: github.com/konsorten/go-windows-terminal-sequences upgrade => v1.0.3
  go: github.com/opencontainers/go-digest upgrade => v1.0.0
  go: github.com/opencontainers/runtime-spec upgrade => v1.0.2
  go: github.com/pkg/errors upgrade => v0.9.1
  go: github.com/sirupsen/logrus upgrade => v1.6.0
  go: github.com/vbatts/go-mtree upgrade => v0.5.0
  go: golang.org/x/crypto upgrade => v0.0.0-20200604202706-70a84ac30bf9
  go: golang.org/x/net upgrade => v0.0.0-20200602114024-627f9648deb9
  go: golang.org/x/sys upgrade => v0.0.0-20200615200032-f1bc736245b1
  go: google.golang.org/protobuf upgrade => v1.24.0

However there are three issues with this update:

 * We cannot update github.com/urfave/cli to anything later than
   v1.22.1 because of a bug when it comes to StringSliceFlag parsing that we
   hit in CI[1] -- hence the new excludes block.

 * Updating github.com/klauspost/compress to anything later than v1.8.6 causes
   us to generate different gzip-compressed blobs due to an optimisation in
   their compression[2]. Since this is generally a good change to have, we have
   to update our CI so that it works with the newest version (even if it's
   sub-optimal to generate different bytes between versions).

 * Updating github.com/cpuguy83/go-md2man to v2 caused issues with our
   "go get" invocation. It turns out we were silently adding go-md2man
   (v1) to our go.mod file each time we ran a Travis build, and the
   switch to v2 uncovered this issue. This is easily fixed by setting
   GO111MODULE=off when doing 'go get' in .travis.yml.

[1]: urfave/cli#1152
[2]: klauspost/compress#105

Signed-off-by: Aleksa Sarai <asarai@suse.de>

asd

Signed-off-by: Aleksa Sarai <asarai@suse.de>
cyphar added a commit to cyphar/umoci that referenced this pull request Jun 19, 2020
We haven't done a dependency bump in quite a while, and there are a fair
few fixes and improvements we should get into umoci before the next
release.

  % go get -u
  go: github.com/apex/log upgrade => v1.4.0
  go: github.com/cpuguy83/go-md2man/v2 upgrade => v2.0.0
  go: github.com/golang/protobuf upgrade => v1.4.2
  go: github.com/klauspost/compress upgrade => v1.10.9
  go: github.com/klauspost/cpuid upgrade => v1.3.0
  go: github.com/klauspost/pgzip upgrade => v1.2.4
  go: github.com/konsorten/go-windows-terminal-sequences upgrade => v1.0.3
  go: github.com/opencontainers/go-digest upgrade => v1.0.0
  go: github.com/opencontainers/runtime-spec upgrade => v1.0.2
  go: github.com/pkg/errors upgrade => v0.9.1
  go: github.com/sirupsen/logrus upgrade => v1.6.0
  go: github.com/vbatts/go-mtree upgrade => v0.5.0
  go: golang.org/x/crypto upgrade => v0.0.0-20200604202706-70a84ac30bf9
  go: golang.org/x/net upgrade => v0.0.0-20200602114024-627f9648deb9
  go: golang.org/x/sys upgrade => v0.0.0-20200615200032-f1bc736245b1
  go: google.golang.org/protobuf upgrade => v1.24.0

However there are three issues with this update:

 * We cannot update github.com/urfave/cli to anything later than
   v1.22.1 because of a bug when it comes to StringSliceFlag parsing that we
   hit in CI[1] -- hence the new excludes block.

 * Updating github.com/klauspost/compress to anything later than v1.8.6 causes
   us to generate different gzip-compressed blobs due to an optimisation in
   their compression[2]. Since this is generally a good change to have, we have
   to update our CI so that it works with the newest version (even if it's
   sub-optimal to generate different bytes between versions).

 * Updating github.com/cpuguy83/go-md2man to v2 caused issues with our
   "go get" invocation. It turns out we were silently adding go-md2man
   (v1) to our go.mod file each time we ran a Travis build, and the
   switch to v2 uncovered this issue. This is easily fixed by setting
   GO111MODULE=off when doing 'go get' in .travis.yml.

[1]: urfave/cli#1152
[2]: klauspost/compress#105

Signed-off-by: Aleksa Sarai <asarai@suse.de>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants