diff --git a/.github/workflows/pika.yml b/.github/workflows/pika.yml index a79439ab7d..df9c51ee5a 100644 --- a/.github/workflows/pika.yml +++ b/.github/workflows/pika.yml @@ -170,24 +170,12 @@ jobs: - name: Extreme Disk Cleanup run: | - - rm -rf /usr/local/share/* || true - rm -rf /usr/share/doc/* || true - rm -rf /usr/share/man/* || true - rm -rf /var/cache/* || true - - find ${{ github.workspace }} -name "*.o" -type f -delete || true - find ${{ github.workspace }} -name "*.a" -type f -delete || true - find ${{ github.workspace }} -name "*.la" -type f -delete || true - find ${{ github.workspace }} -name "*.so" -type f -delete || true - find ${{ github.workspace }} -name "*.pyc" -type f -delete || true - - rm -rf ${{ github.workspace }}/.git || true - + rm -rf /__w/pikiwidb/pikiwidb/buildtrees 2>/dev/null || true + rm -rf /__w/pikiwidb/pikiwidb/deps 2>/dev/null || true + find /__w/pikiwidb/pikiwidb -type f \( -name "librocksdb.a" -o -name "libprotoc.a" -o -name "libprotobuf.a" \) -delete 2>/dev/null || true + find /__w/pikiwidb/pikiwidb -type f \( -name "*.o" -o -name "*.a" -o -name "*.la" -o -name "*.so" -o -name "*_test" \) ! -path "*/build/pika" -delete 2>/dev/null || true + rm -rf /__w/pikiwidb/pikiwidb/.git 2>/dev/null || true df -h - - echo "Largest directories:" - du -h --max-depth=2 / 2>/dev/null | sort -hr | head -20 - name: Create Log Directories run: | @@ -225,7 +213,7 @@ jobs: build_on_macos: - runs-on: macos-13 + runs-on: macos-14 steps: - uses: actions/checkout@v4 @@ -238,17 +226,18 @@ jobs: - name: ccache uses: hendrikmuhs/ccache-action@v1.2.13 with: - key: macos-13 + key: macos-14 - name: Install Deps run: | brew list --versions cmake && brew uninstall --ignore-dependencies --force cmake || true - brew install gcc@10 automake cmake make binutils + brew install gcc@13 automake cmake make binutils - name: Configure CMake run: | - export CC=/usr/local/opt/gcc@10/bin/gcc-10 - cmake -B build -DCMAKE_C_COMPILER=/usr/local/opt/gcc@10/bin/gcc-10 -DUSE_PIKA_TOOLS=ON -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} -DCMAKE_CXX_FLAGS_DEBUG=-fsanitize=address -D CMAKE_C_COMPILER_LAUNCHER=ccache -D CMAKE_CXX_COMPILER_LAUNCHER=ccache + GCC_PREFIX=$(brew --prefix gcc@13) + export CC=$GCC_PREFIX/bin/gcc-13 + cmake -B build -DCMAKE_C_COMPILER=$GCC_PREFIX/bin/gcc-13 -DUSE_PIKA_TOOLS=ON -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} -DCMAKE_CXX_FLAGS_DEBUG=-fsanitize=address -D CMAKE_C_COMPILER_LAUNCHER=ccache -D CMAKE_CXX_COMPILER_LAUNCHER=ccache - name: Build run: | diff --git a/include/pika_conf.h b/include/pika_conf.h index ecd42e0f91..e3c1519be2 100644 --- a/include/pika_conf.h +++ b/include/pika_conf.h @@ -771,7 +771,7 @@ class PikaConf : public pstd::BaseConf { TryPushDiffCommands("max-background-jobs", std::to_string(value)); max_background_jobs_ = value; } - void SetWriteBufferSize(const int& value) { + void SetWriteBufferSize(int64_t value) { std::lock_guard l(rwlock_); TryPushDiffCommands("write-buffer-size", std::to_string(value)); write_buffer_size_ = value; diff --git a/src/pika_admin.cc b/src/pika_admin.cc index 9bb40d6d0f..944c65f9ec 100644 --- a/src/pika_admin.cc +++ b/src/pika_admin.cc @@ -2794,7 +2794,7 @@ void ConfigCmd::ConfigSet(std::shared_ptr db) { res_.AppendStringRaw("-ERR Set write-buffer-size wrong: " + s.ToString() + "\r\n"); return; } - g_pika_conf->SetWriteBufferSize(static_cast(ival)); + g_pika_conf->SetWriteBufferSize(ival); res_.AppendStringRaw("+OK\r\n"); } else if (set_item == "max-write-buffer-num") { if (pstd::string2int(value.data(), value.size(), &ival) == 0) { diff --git a/src/storage/tests/hashes_test.cc b/src/storage/tests/hashes_test.cc index 8ee0f0490a..a92ec86617 100644 --- a/src/storage/tests/hashes_test.cc +++ b/src/storage/tests/hashes_test.cc @@ -385,7 +385,7 @@ TEST_F(HashesTest, HIncrbyfloat) { // operation is performed s = db.HIncrbyfloat("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_FIELD", "12.3456", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "12.3456"); + ASSERT_NEAR(std::stod(new_value), 12.3456, 1e-9); s = db.HGet("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_FIELD", &new_value); ASSERT_TRUE(s.ok()); //ASSERT_EQ(new_value, "12.3456"); @@ -407,10 +407,10 @@ TEST_F(HashesTest, HIncrbyfloat) { // operation is performed s = db.HIncrbyfloat("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_NOT_EXIST_FIELD", "65.4321000", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "65.4321"); + ASSERT_NEAR(std::stod(new_value), 65.4321, 1e-9); s = db.HGet("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_NOT_EXIST_FIELD", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "65.4321"); + ASSERT_NEAR(std::stod(new_value), 65.4321, 1e-9); s = db.HLen("HINCRBYFLOAT_KEY", &ret); ASSERT_TRUE(s.ok()); ASSERT_EQ(ret, 3); @@ -421,18 +421,18 @@ TEST_F(HashesTest, HIncrbyfloat) { // Positive test s = db.HIncrbyfloat("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_NUM_FIELD", "+123.456789", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "1123.456789"); + ASSERT_NEAR(std::stod(new_value), 1123.456789, 1e-9); s = db.HGet("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_NUM_FIELD", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "1123.456789"); + ASSERT_NEAR(std::stod(new_value), 1123.456789, 1e-9); // Negative test s = db.HIncrbyfloat("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_NUM_FIELD", "-123.456789", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "1000"); + ASSERT_NEAR(std::stod(new_value), 1000, 1e-9); s = db.HGet("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_NUM_FIELD", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "1000"); + ASSERT_NEAR(std::stod(new_value), 1000, 1e-9); s = db.HLen("HINCRBYFLOAT_KEY", &ret); ASSERT_TRUE(s.ok()); @@ -442,83 +442,83 @@ TEST_F(HashesTest, HIncrbyfloat) { // case 1 s = db.HIncrbyfloat("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD1", "2.0e2", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "200"); + ASSERT_NEAR(std::stod(new_value), 200, 1e-9); s = db.HGet("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD1", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "200"); + ASSERT_NEAR(std::stod(new_value), 200, 1e-9); // case2 s = db.HIncrbyfloat("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD2", "5.0e3", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "5000"); + ASSERT_NEAR(std::stod(new_value), 5000, 1e-9); s = db.HIncrbyfloat("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD2", "2.0e2", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "5200"); + ASSERT_NEAR(std::stod(new_value), 5200, 1e-9); s = db.HGet("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD2", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "5200"); + ASSERT_NEAR(std::stod(new_value), 5200, 1e-9); // case 3 s = db.HIncrbyfloat("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD3", "5.0e3", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "5000"); + ASSERT_NEAR(std::stod(new_value), 5000, 1e-9); s = db.HIncrbyfloat("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD3", "-2.0e2", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "4800"); + ASSERT_NEAR(std::stod(new_value), 4800, 1e-9); s = db.HGet("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD3", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "4800"); + ASSERT_NEAR(std::stod(new_value), 4800, 1e-9); // case 4 s = db.HIncrbyfloat("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD4", ".456789", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "0.456789"); + ASSERT_NEAR(std::stod(new_value), 0.456789, 1e-9); s = db.HGet("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD4", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "0.456789"); + ASSERT_NEAR(std::stod(new_value), 0.456789, 1e-9); // case5 s = db.HIncrbyfloat("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD5", "-.456789", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "-0.456789"); + ASSERT_NEAR(std::stod(new_value), -0.456789, 1e-9); s = db.HGet("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD5", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "-0.456789"); + ASSERT_NEAR(std::stod(new_value), -0.456789, 1e-9); // case6 s = db.HIncrbyfloat("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD6", "+.456789", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "0.456789"); + ASSERT_NEAR(std::stod(new_value), 0.456789, 1e-9); s = db.HGet("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD6", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "0.456789"); + ASSERT_NEAR(std::stod(new_value), 0.456789, 1e-9); // case7 s = db.HIncrbyfloat("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD7", "+.456789", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "0.456789"); + ASSERT_NEAR(std::stod(new_value), 0.456789, 1e-9); s = db.HIncrbyfloat("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD7", "-.456789", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "0"); + ASSERT_NEAR(std::stod(new_value), 0, 1e-9); s = db.HGet("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD7", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "0"); + ASSERT_NEAR(std::stod(new_value), 0, 1e-9); // case8 s = db.HIncrbyfloat("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD8", "-00000.456789000", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "-0.456789"); + ASSERT_NEAR(std::stod(new_value), -0.456789, 1e-9); s = db.HGet("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD8", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "-0.456789"); + ASSERT_NEAR(std::stod(new_value), -0.456789, 1e-9); // case9 s = db.HIncrbyfloat("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD9", "+00000.456789000", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "0.456789"); + ASSERT_NEAR(std::stod(new_value), 0.456789, 1e-9); s = db.HGet("HINCRBYFLOAT_KEY", "HINCRBYFLOAT_SP_FIELD9", &new_value); ASSERT_TRUE(s.ok()); - ASSERT_EQ(new_value, "0.456789"); + ASSERT_NEAR(std::stod(new_value), 0.456789, 1e-9); s = db.HLen("HINCRBYFLOAT_KEY", &ret); ASSERT_TRUE(s.ok()); diff --git a/tests/integration/server_test.go b/tests/integration/server_test.go index 09d11ff639..9823c6b664 100644 --- a/tests/integration/server_test.go +++ b/tests/integration/server_test.go @@ -345,6 +345,18 @@ var _ = Describe("Server", func() { Expect(r.Val()).To(Equal("OK")) }) + It("should ConfigSet write-buffer-size large value", func() { + // Test for fix: when setting write-buffer-size value larger than 2147483647, + // the value should not become negative + configSet := client.ConfigSet(ctx, "write-buffer-size", "3000000000") + Expect(configSet.Err()).NotTo(HaveOccurred()) + Expect(configSet.Val()).To(Equal("OK")) + + configGet := client.ConfigGet(ctx, "write-buffer-size") + Expect(configGet.Err()).NotTo(HaveOccurred()) + Expect(configGet.Val()).To(Equal(map[string]string{"write-buffer-size": "3000000000"})) + }) + It("should ConfigSet maxmemory", func() { configGet := client.ConfigGet(ctx, "maxmemory") Expect(configGet.Err()).NotTo(HaveOccurred())