1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-03-09 15:40:10 +00:00

Exp/compress candidates (#942)

* Compress block candidates in validator-session

* Compress blocks in full-node (disabled for now)

---------

Co-authored-by: SpyCheese <mikle98@yandex.ru>
This commit is contained in:
EmelyanenkoK 2024-03-26 14:52:46 +03:00 committed by GitHub
parent 9452c367e4
commit 0bcebe8a0e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
21 changed files with 548 additions and 112 deletions

View file

@ -15,6 +15,7 @@ if (NOT DEFINED CMAKE_INSTALL_LIBDIR)
endif()
find_package(PkgConfig REQUIRED)
find_package(LZ4)
if (NOT ZLIB_FOUND)
pkg_check_modules(ZLIB zlib)
endif()
@ -280,6 +281,15 @@ if (TDUTILS_MIME_TYPE)
)
endif()
if (LZ4_FOUND)
set(TD_HAVE_LZ4 1)
set(TDUTILS_SOURCE
${TDUTILS_SOURCE}
td/utils/lz4.cpp
td/utils/lz4.h
)
endif()
set(TDUTILS_TEST_SOURCE
${CMAKE_CURRENT_SOURCE_DIR}/test/buffer.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test/ConcurrentHashMap.cpp
@ -338,6 +348,11 @@ endif()
if (CRC32C_FOUND)
target_link_libraries(tdutils PRIVATE crc32c)
endif()
if (LZ4_FOUND)
target_link_libraries(tdutils PRIVATE ${LZ4_LIBRARIES})
endif()
if (ABSL_FOUND)
target_link_libraries_system(tdutils absl::flat_hash_map absl::flat_hash_set absl::hash)
endif()

View file

@ -3,6 +3,7 @@
#cmakedefine01 TD_HAVE_OPENSSL
#cmakedefine01 TD_HAVE_ZLIB
#cmakedefine01 TD_HAVE_CRC32C
#cmakedefine01 TD_HAVE_LZ4
#cmakedefine01 TD_HAVE_COROUTINES
#cmakedefine01 TD_HAVE_ABSL
#cmakedefine01 TD_FD_DEBUG

48
tdutils/td/utils/lz4.cpp Normal file
View file

@ -0,0 +1,48 @@
/*
This file is part of TON Blockchain Library.
TON Blockchain Library is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
TON Blockchain Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with TON Blockchain Library. If not, see <http://www.gnu.org/licenses/>.
*/
#include "td/utils/buffer.h"
#include "td/utils/misc.h"
#include <lz4.h>
namespace td {
td::BufferSlice lz4_compress(td::Slice data) {
int size = narrow_cast<int>(data.size());
int buf_size = LZ4_compressBound(size);
td::BufferSlice compressed(buf_size);
int compressed_size = LZ4_compress_default(data.data(), compressed.data(), size, buf_size);
CHECK(compressed_size > 0);
return td::BufferSlice{compressed.as_slice().substr(0, compressed_size)};
}
td::Result<td::BufferSlice> lz4_decompress(td::Slice data, int max_decompressed_size) {
TRY_RESULT(size, narrow_cast_safe<int>(data.size()));
if (max_decompressed_size < 0) {
return td::Status::Error("invalid max_decompressed_size");
}
td::BufferSlice decompressed(max_decompressed_size);
int result = LZ4_decompress_safe(data.data(), decompressed.data(), size, max_decompressed_size);
if (result < 0) {
return td::Status::Error(PSTRING() << "lz4 decompression failed, error code: " << result);
}
if (result == max_decompressed_size) {
return decompressed;
}
return td::BufferSlice{decompressed.as_slice().substr(0, result)};
}
} // namespace td

27
tdutils/td/utils/lz4.h Normal file
View file

@ -0,0 +1,27 @@
/*
This file is part of TON Blockchain Library.
TON Blockchain Library is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
TON Blockchain Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with TON Blockchain Library. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "td/utils/buffer.h"
#include "td/utils/Status.h"
namespace td {
td::BufferSlice lz4_compress(td::Slice data);
td::Result<td::BufferSlice> lz4_decompress(td::Slice data, int max_decompressed_size);
} // namespace td