Skip to content

Commit

Permalink
refactor record #stream
Browse files Browse the repository at this point in the history
  • Loading branch information
jiahuili430 committed Apr 26, 2023
1 parent 7c61edd commit 89790d1
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 24 deletions.
8 changes: 4 additions & 4 deletions src/couch/src/couch_bt_engine_compactor.erl
Original file line number Diff line number Diff line change
Expand Up @@ -522,19 +522,19 @@ copy_doc_attachments(#st{} = SrcSt, SrcSp, DstSt) ->
{ok, SrcStream} = couch_bt_engine:open_read_stream(SrcSt, BinSp),
{ok, DstStream} = couch_bt_engine:open_write_stream(DstSt, []),
ok = couch_stream:copy(SrcStream, DstStream),
{NewStream, AttLen, AttLen, ActualMd5, _IdentityMd5} =
{NewStream, AttLen, AttLen, ActualDigest, _IdentityDigest} =
couch_stream:close(DstStream),
{ok, NewBinSp} = couch_stream:to_disk_term(NewStream),
couch_util:check_md5(ExpectedMd5, ActualMd5),
couch_util:check_md5(ExpectedMd5, ActualDigest),
{Name, Type, NewBinSp, AttLen, AttLen, RevPos, ExpectedMd5, identity};
({Name, Type, BinSp, AttLen, DiskLen, RevPos, ExpectedMd5, Enc1}) ->
{ok, SrcStream} = couch_bt_engine:open_read_stream(SrcSt, BinSp),
{ok, DstStream} = couch_bt_engine:open_write_stream(DstSt, []),
ok = couch_stream:copy(SrcStream, DstStream),
{NewStream, AttLen, _, ActualMd5, _IdentityMd5} =
{NewStream, AttLen, _, ActualDigest, _IdentityDigest} =
couch_stream:close(DstStream),
{ok, NewBinSp} = couch_stream:to_disk_term(NewStream),
couch_util:check_md5(ExpectedMd5, ActualMd5),
couch_util:check_md5(ExpectedMd5, ActualDigest),
Enc =
case Enc1 of
true ->
Expand Down
4 changes: 2 additions & 2 deletions src/couch/src/couch_db_split.erl
Original file line number Diff line number Diff line change
Expand Up @@ -442,7 +442,7 @@ process_attachment(
{ok, SrcStream} = couch_db_engine:open_read_stream(SourceDb, BinSp),
{ok, DstStream} = couch_db_engine:open_write_stream(TargetDb, []),
ok = couch_stream:copy(SrcStream, DstStream),
{NewStream, AttLen, AttLen, ActualMd5, _IdentityMd5} =
{NewStream, AttLen, AttLen, ActualDigest, _IdentityDigest} =
couch_stream:close(DstStream),
{ok, NewBinSp} = couch_stream:to_disk_term(NewStream),
couch_util:check_md5(ExpectedMd5, ActualMd5),
Expand All @@ -453,7 +453,7 @@ process_attachment(
{ok, SrcStream} = couch_db_engine:open_read_stream(SourceDb, BinSp),
{ok, DstStream} = couch_db_engine:open_write_stream(TargetDb, []),
ok = couch_stream:copy(SrcStream, DstStream),
{NewStream, AttLen, _, ActualMd5, _IdentityMd5} =
{NewStream, AttLen, _, ActualDigest, _IdentityDigest} =
couch_stream:close(DstStream),
{ok, NewBinSp} = couch_stream:to_disk_term(NewStream),
couch_util:check_md5(ExpectedMd5, ActualMd5),
Expand Down
36 changes: 18 additions & 18 deletions src/couch/src/couch_stream.erl
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@
buffer_len = 0,
max_buffer,
written_len = 0,
md5,
% md5 of the content without any transformation applied (e.g. compression)
digest,
% digest of the content without any transformation applied (e.g. compression)
% needed for the attachment upload integrity check (ticket 558)
identity_md5,
identity_digest,
identity_len = 0,
encoding_fun,
end_encoding_fun
Expand Down Expand Up @@ -189,8 +189,8 @@ init({Engine, OpenerPid, OpenerPriority, Options}) ->
{ok, #stream{
engine = Engine,
opener_monitor = erlang:monitor(process, OpenerPid),
md5 = couch_hash:digest_init(),
identity_md5 = couch_hash:digest_init(),
digest = couch_hash:digest_init(),
identity_digest = couch_hash:digest_init(),
encoding_fun = EncodingFun,
end_encoding_fun = EndEncodingFun,
max_buffer = couch_util:get_value(
Expand All @@ -209,26 +209,26 @@ handle_call({write, Bin}, _From, Stream) ->
buffer_len = BufferLen,
buffer_list = Buffer,
max_buffer = Max,
md5 = Md5,
identity_md5 = IdenMd5,
digest = Digest,
identity_digest = IdenDigest,
identity_len = IdenLen,
encoding_fun = EncodingFun
} = Stream,
if
BinSize + BufferLen > Max ->
WriteBin = lists:reverse(Buffer, [Bin]),
IdenMd5_2 = couch_hash:digest_update(IdenMd5, WriteBin),
IdenDigest_2 = couch_hash:digest_update(IdenDigest, WriteBin),
case EncodingFun(WriteBin) of
[] ->
% case where the encoder did some internal buffering
% (zlib does it for example)
NewEngine = Engine,
WrittenLen2 = WrittenLen,
Md5_2 = Md5;
Digest_2 = Digest;
WriteBin2 ->
NewEngine = do_write(Engine, WriteBin2),
WrittenLen2 = WrittenLen + iolist_size(WriteBin2),
Md5_2 = couch_hash:digest_update(Md5, WriteBin2)
Digest_2 = couch_hash:digest_update(Digest, WriteBin2)
end,

{reply, ok,
Expand All @@ -237,8 +237,8 @@ handle_call({write, Bin}, _From, Stream) ->
written_len = WrittenLen2,
buffer_list = [],
buffer_len = 0,
md5 = Md5_2,
identity_md5 = IdenMd5_2,
digest = Digest_2,
identity_digest = IdenDigest_2,
identity_len = IdenLen + BinSize
},
hibernate};
Expand All @@ -255,25 +255,25 @@ handle_call(close, _From, Stream) ->
opener_monitor = MonRef,
written_len = WrittenLen,
buffer_list = Buffer,
md5 = Md5,
identity_md5 = IdenMd5,
digest = Digest,
identity_digest = IdenDigest,
identity_len = IdenLen,
encoding_fun = EncodingFun,
end_encoding_fun = EndEncodingFun
} = Stream,

WriteBin = lists:reverse(Buffer),
IdenDigestFinal = couch_hash:digest_final(couch_hash:digest_update(IdenMd5, WriteBin)),
IdenDigestFinal = couch_hash:digest_final(couch_hash:digest_update(IdenDigest, WriteBin)),
WriteBin2 = EncodingFun(WriteBin) ++ EndEncodingFun(),
Md5Final = couch_hash:digest_final(couch_hash:digest_update(Md5, WriteBin2)),
DigestFinal = couch_hash:digest_final(couch_hash:digest_update(Digest, WriteBin2)),
Result =
case WriteBin2 of
[] ->
{do_finalize(Engine), WrittenLen, IdenLen, Md5Final, IdenDigestFinal};
{do_finalize(Engine), WrittenLen, IdenLen, DigestFinal, IdenDigestFinal};
_ ->
NewEngine = do_write(Engine, WriteBin2),
StreamLen = WrittenLen + iolist_size(WriteBin2),
{do_finalize(NewEngine), StreamLen, IdenLen, Md5Final, IdenDigestFinal}
{do_finalize(NewEngine), StreamLen, IdenLen, DigestFinal, IdenDigestFinal}
end,
erlang:demonitor(MonRef),
{stop, normal, Result, Stream}.
Expand Down

0 comments on commit 89790d1

Please sign in to comment.