From dc31064e968d13b51d4c42dc8452d74e8c497a06 Mon Sep 17 00:00:00 2001 From: Fuheng Zhao Date: Wed, 18 Aug 2021 18:52:44 -0700 Subject: [PATCH 01/14] change histogram counts write to log format --- flow/Histogram.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flow/Histogram.cpp b/flow/Histogram.cpp index 8063b4d409..d2dc9d9f52 100644 --- a/flow/Histogram.cpp +++ b/flow/Histogram.cpp @@ -135,7 +135,7 @@ void Histogram::writeToLog() { e.detail(format("LessThan%f", (i + 1) * 0.04), buckets[i]); break; case Unit::count: - e.detail(format("LessThan%f", (i + 1) * ((upperBound - lowerBound) / 31.0)), buckets[i]); + e.detail(format("LessThan%.2f", (i + 1) * ((upperBound - lowerBound) / 31.0)), buckets[i]); break; default: ASSERT(false); From 5aeb6249a56b3a40403638f7940328ed4eb98c4c Mon Sep 17 00:00:00 2001 From: Fuheng Zhao Date: Fri, 20 Aug 2021 09:24:59 -0700 Subject: [PATCH 02/14] change unit::cout format into %u --- flow/Histogram.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/flow/Histogram.cpp b/flow/Histogram.cpp index d2dc9d9f52..e427457133 100644 --- a/flow/Histogram.cpp +++ b/flow/Histogram.cpp @@ -135,7 +135,8 @@ void Histogram::writeToLog() { e.detail(format("LessThan%f", (i + 1) * 0.04), buckets[i]); break; case Unit::count: - e.detail(format("LessThan%.2f", (i + 1) * ((upperBound - lowerBound) / 31.0)), buckets[i]); + value = uint64_t((i + 1) * ((upperBound - lowerBound) / 31.0)); + e.detail(format("LessThan%u", value), buckets[i]); break; default: ASSERT(false); From ec1fcfba57a907838caef5b1029ea5e95c348175 Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Fri, 16 Jul 2021 19:45:23 +0000 Subject: [PATCH 03/14] Add test coverage for profile command --- bindings/python/tests/fdbcli_tests.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/bindings/python/tests/fdbcli_tests.py b/bindings/python/tests/fdbcli_tests.py index 36f9ec34a9..e9fe08b44f 100755 --- a/bindings/python/tests/fdbcli_tests.py +++ b/bindings/python/tests/fdbcli_tests.py @@ -475,6 +475,29 @@ def wait_for_database_available(logger): time.sleep(1) +@enable_logging() +def profile(logger): + # profile list should return the same list as kill + addresses = get_fdb_process_addresses() + output1 = run_fdbcli_command('profile', 'list') + assert output1.split('\n') == addresses + # check default output + default_profile_client_get_output = 'Client profiling rate is set to default and size limit is set to default.' + output2 = run_fdbcli_command('profile', 'client', 'get') + assert output2 == default_profile_client_get_output + # TODO: this test is now failing, the implementation needs to be fixed + # set rate and size limit + # run_fdbcli_command('profile', 'client', 'set', '0.5', 'default') + # output3 = run_fdbcli_command('profile', 'client', 'get') + # logger.debug(output3) + # output3_list = output3.split(' ') + # assert float(output3_list[6]) == 0.5 + # assert output3_list[-1] == '1000000000.' + # change back to default value and check + run_fdbcli_command('profile', 'client', 'set', 'default', 'default') + assert run_fdbcli_command('profile', 'client', 'get') == default_profile_client_get_output + + if __name__ == '__main__': parser = ArgumentParser(formatter_class=RawDescriptionHelpFormatter, description=""" @@ -512,6 +535,7 @@ if __name__ == '__main__': kill() lockAndUnlock() maintenance() + profile() setclass() suspend() transaction() From 6b01363f45ff6113b66b0d9546150665b6615870 Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Wed, 25 Aug 2021 10:29:48 -0700 Subject: [PATCH 04/14] Remove commented test; fix issues --- bindings/python/tests/fdbcli_tests.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/bindings/python/tests/fdbcli_tests.py b/bindings/python/tests/fdbcli_tests.py index e9fe08b44f..cb33dc824e 100755 --- a/bindings/python/tests/fdbcli_tests.py +++ b/bindings/python/tests/fdbcli_tests.py @@ -478,21 +478,21 @@ def wait_for_database_available(logger): @enable_logging() def profile(logger): # profile list should return the same list as kill - addresses = get_fdb_process_addresses() + addresses = get_fdb_process_addresses(logger) output1 = run_fdbcli_command('profile', 'list') assert output1.split('\n') == addresses # check default output default_profile_client_get_output = 'Client profiling rate is set to default and size limit is set to default.' output2 = run_fdbcli_command('profile', 'client', 'get') assert output2 == default_profile_client_get_output - # TODO: this test is now failing, the implementation needs to be fixed # set rate and size limit - # run_fdbcli_command('profile', 'client', 'set', '0.5', 'default') - # output3 = run_fdbcli_command('profile', 'client', 'get') - # logger.debug(output3) - # output3_list = output3.split(' ') - # assert float(output3_list[6]) == 0.5 - # assert output3_list[-1] == '1000000000.' + run_fdbcli_command('profile', 'client', 'set', '0.5', '1GB') + output3 = run_fdbcli_command('profile', 'client', 'get') + logger.debug(output3) + output3_list = output3.split(' ') + assert float(output3_list[6]) == 0.5 + # size limit should be 1GB + assert output3_list[-1] == '1000000000.' # change back to default value and check run_fdbcli_command('profile', 'client', 'set', 'default', 'default') assert run_fdbcli_command('profile', 'client', 'get') == default_profile_client_get_output From b00cefc2432c2db1752c9f599113ada7c207893a Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Wed, 25 Aug 2021 10:38:01 -0700 Subject: [PATCH 05/14] Add a safe wait in the fdbcli setclass test --- bindings/python/tests/fdbcli_tests.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bindings/python/tests/fdbcli_tests.py b/bindings/python/tests/fdbcli_tests.py index cb33dc824e..3c710dcf4a 100755 --- a/bindings/python/tests/fdbcli_tests.py +++ b/bindings/python/tests/fdbcli_tests.py @@ -134,6 +134,8 @@ def setclass(logger): assert random_class_type in class_type_line_2 # check class source assert 'set_class' in class_type_line_2 + # wait for everything to settle down + wait_for_database_available(logger) # set back to default run_fdbcli_command('setclass', network_address, 'default') # everything should be back to the same as before From b6dc20875e623c1abb0f662f4e466f6f5cd557a9 Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Fri, 16 Jul 2021 20:24:09 +0000 Subject: [PATCH 06/14] Add test coverage for triggerddteaminfolog command --- bindings/python/tests/fdbcli_tests.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bindings/python/tests/fdbcli_tests.py b/bindings/python/tests/fdbcli_tests.py index 3c710dcf4a..eb82cc0362 100755 --- a/bindings/python/tests/fdbcli_tests.py +++ b/bindings/python/tests/fdbcli_tests.py @@ -499,6 +499,11 @@ def profile(logger): run_fdbcli_command('profile', 'client', 'set', 'default', 'default') assert run_fdbcli_command('profile', 'client', 'get') == default_profile_client_get_output +@enable_logging() +def triggerddteaminfolog(logger): + # this command is straightforward and only has one code path + output = run_fdbcli_command('triggerddteaminfolog') + assert output == 'Triggered team info logging in data distribution.' if __name__ == '__main__': parser = ArgumentParser(formatter_class=RawDescriptionHelpFormatter, @@ -542,6 +547,7 @@ if __name__ == '__main__': suspend() transaction() throttle() + triggerddteaminfolog() else: assert args.process_number > 1, "Process number should be positive" coordinators() From a1c8217260f50a9526b91ac0339b0706944a407d Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Wed, 25 Aug 2021 13:04:01 -0700 Subject: [PATCH 07/14] Move setclass test from single-process_test to multi-process_test --- bindings/python/tests/fdbcli_tests.py | 63 +++++++++++++++------------ 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/bindings/python/tests/fdbcli_tests.py b/bindings/python/tests/fdbcli_tests.py index eb82cc0362..139122b313 100755 --- a/bindings/python/tests/fdbcli_tests.py +++ b/bindings/python/tests/fdbcli_tests.py @@ -104,45 +104,52 @@ def maintenance(logger): @enable_logging() def setclass(logger): + # get all processes' network addresses output1 = run_fdbcli_command('setclass') - class_type_line_1 = output1.split('\n')[-1] - logger.debug(class_type_line_1) - # check process' network address - assert '127.0.0.1' in class_type_line_1 - network_address = ':'.join(class_type_line_1.split(':')[:2]) - logger.debug("Network address: {}".format(network_address)) - # check class type - assert 'unset' in class_type_line_1 - # check class source - assert 'command_line' in class_type_line_1 + logger.debug(output1) + # except the first line, each line is one process + process_types = output1.split('\n')[1:] + assert len(process_types) == args.process_number + addresses = [] + for line in process_types: + assert '127.0.0.1' in line + # check class type + assert 'unset' in line + # check class source + assert 'command_line' in line + # check process' network address + network_address = ':'.join(line.split(':')[:2]) + logger.debug("Network address: {}".format(network_address)) + addresses.append(network_address) + random_address = random.choice(addresses) + logger.debug("Randomly selected address: {}".format(random_address)) # set class to a random valid type - class_types = ['storage', 'storage', 'transaction', 'resolution', + class_types = ['storage', 'transaction', 'resolution', 'commit_proxy', 'grv_proxy', 'master', 'stateless', 'log', 'router', 'cluster_controller', 'fast_restore', 'data_distributor', 'coordinator', 'ratekeeper', 'storage_cache', 'backup' ] random_class_type = random.choice(class_types) logger.debug("Change to type: {}".format(random_class_type)) - run_fdbcli_command('setclass', network_address, random_class_type) + run_fdbcli_command('setclass', random_address, random_class_type) # check the set successful output2 = run_fdbcli_command('setclass') - class_type_line_2 = output2.split('\n')[-1] - logger.debug(class_type_line_2) + logger.debug(output2) + assert random_address in output2 + process_types = output2.split('\n')[1:] # check process' network address - assert network_address in class_type_line_2 - # check class type changed to the specified value - assert random_class_type in class_type_line_2 - # check class source - assert 'set_class' in class_type_line_2 - # wait for everything to settle down - wait_for_database_available(logger) + for line in process_types: + if random_address in line: + # check class type changed to the specified value + assert random_class_type in line + # check class source + assert 'set_class' in line # set back to default - run_fdbcli_command('setclass', network_address, 'default') - # everything should be back to the same as before + run_fdbcli_command('setclass', random_address, 'default') output3 = run_fdbcli_command('setclass') - class_type_line_3 = output3.split('\n')[-1] - logger.debug(class_type_line_3) - assert class_type_line_3 == class_type_line_1 + logger.debug(output3) + # everything should be back to the same as before + assert output1 == output3 @enable_logging() @@ -499,12 +506,14 @@ def profile(logger): run_fdbcli_command('profile', 'client', 'set', 'default', 'default') assert run_fdbcli_command('profile', 'client', 'get') == default_profile_client_get_output + @enable_logging() def triggerddteaminfolog(logger): # this command is straightforward and only has one code path output = run_fdbcli_command('triggerddteaminfolog') assert output == 'Triggered team info logging in data distribution.' + if __name__ == '__main__': parser = ArgumentParser(formatter_class=RawDescriptionHelpFormatter, description=""" @@ -543,7 +552,6 @@ if __name__ == '__main__': lockAndUnlock() maintenance() profile() - setclass() suspend() transaction() throttle() @@ -552,3 +560,4 @@ if __name__ == '__main__': assert args.process_number > 1, "Process number should be positive" coordinators() exclude() + setclass() From 0b9f32a7d23e9cc3251087262468b1895a4f808f Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Wed, 25 Aug 2021 14:50:52 -0700 Subject: [PATCH 08/14] Remove the unnecessary check in the end of setclass --- bindings/python/tests/fdbcli_tests.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/bindings/python/tests/fdbcli_tests.py b/bindings/python/tests/fdbcli_tests.py index 139122b313..4ca9052670 100755 --- a/bindings/python/tests/fdbcli_tests.py +++ b/bindings/python/tests/fdbcli_tests.py @@ -144,12 +144,8 @@ def setclass(logger): assert random_class_type in line # check class source assert 'set_class' in line - # set back to default - run_fdbcli_command('setclass', random_address, 'default') - output3 = run_fdbcli_command('setclass') - logger.debug(output3) - # everything should be back to the same as before - assert output1 == output3 + # set back to unset + run_fdbcli_command('setclass', random_address, 'unset') @enable_logging() From 5ce2e44a3650b4aa02edbc3766cd10fe0c5ac088 Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Thu, 26 Aug 2021 12:20:09 -0700 Subject: [PATCH 09/14] Unit tests require a match from the test pattern in order to be successful. This avoids cases where a typo in the pattern might lead one to believe that their tests were all successful. --- fdbserver/workloads/UnitTests.actor.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fdbserver/workloads/UnitTests.actor.cpp b/fdbserver/workloads/UnitTests.actor.cpp index b9b792afe4..b361115645 100644 --- a/fdbserver/workloads/UnitTests.actor.cpp +++ b/fdbserver/workloads/UnitTests.actor.cpp @@ -110,7 +110,15 @@ struct UnitTestWorkload : TestWorkload { tests.push_back(test); } } + fprintf(stdout, "Found %zu tests\n", tests.size()); + + if (tests.size() == 0) { + TraceEvent(SevError, "NoMatchingUnitTests").detail("TestPattern", self->testPattern); + ++self->testsFailed; + return Void(); + } + deterministicRandom()->randomShuffle(tests); if (self->testRunLimit > 0 && tests.size() > self->testRunLimit) tests.resize(self->testRunLimit); From a9c77dcb276d748608ea6454a90e9c4ac2de5069 Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Thu, 26 Aug 2021 12:33:42 -0700 Subject: [PATCH 10/14] Fix format specifier to 64 bit size --- flow/Histogram.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flow/Histogram.cpp b/flow/Histogram.cpp index e427457133..521ee8a988 100644 --- a/flow/Histogram.cpp +++ b/flow/Histogram.cpp @@ -136,7 +136,7 @@ void Histogram::writeToLog() { break; case Unit::count: value = uint64_t((i + 1) * ((upperBound - lowerBound) / 31.0)); - e.detail(format("LessThan%u", value), buckets[i]); + e.detail(format("LessThan%" PRIu64, value), buckets[i]); break; default: ASSERT(false); From 656dccae083ca5029606ffe6d5018bbc4dc11b70 Mon Sep 17 00:00:00 2001 From: Fuheng Zhao Date: Thu, 26 Aug 2021 13:02:55 -0700 Subject: [PATCH 11/14] fix type --- flow/Histogram.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flow/Histogram.cpp b/flow/Histogram.cpp index e427457133..3cf4ddb158 100644 --- a/flow/Histogram.cpp +++ b/flow/Histogram.cpp @@ -125,18 +125,18 @@ void Histogram::writeToLog() { totalCount += buckets[i]; switch (unit) { case Unit::microseconds: - e.detail(format("LessThan%u.%03u", value / 1000, value % 1000), buckets[i]); + e.detail(format("LessThan%u.%03u", int(value / 1000), int(value % 1000)), buckets[i]); break; case Unit::bytes: case Unit::bytes_per_second: - e.detail(format("LessThan%u", value), buckets[i]); + e.detail(format("LessThan%" PRIu64, value), buckets[i]); break; case Unit::percentage: e.detail(format("LessThan%f", (i + 1) * 0.04), buckets[i]); break; case Unit::count: value = uint64_t((i + 1) * ((upperBound - lowerBound) / 31.0)); - e.detail(format("LessThan%u", value), buckets[i]); + e.detail(format("LessThan%" PRIu64, value), buckets[i]); break; default: ASSERT(false); From 8a19dac2f7b7073879625232aa6bfff952d60e91 Mon Sep 17 00:00:00 2001 From: Fuheng Zhao Date: Thu, 26 Aug 2021 13:08:11 -0700 Subject: [PATCH 12/14] update the count and precetage to countLinear and percentageLinear --- fdbserver/VersionedBTree.actor.cpp | 14 +++++++------- flow/Histogram.cpp | 4 ++-- flow/Histogram.h | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/fdbserver/VersionedBTree.actor.cpp b/fdbserver/VersionedBTree.actor.cpp index 5d01169ee8..e5643012c2 100644 --- a/fdbserver/VersionedBTree.actor.cpp +++ b/fdbserver/VersionedBTree.actor.cpp @@ -1535,17 +1535,17 @@ struct RedwoodMetrics { if (!buildFillPctSketch) { std::string levelString = format("L%d", level); buildFillPctSketch = Histogram::getHistogram( - LiteralStringRef("buildFillPct"), levelString, Histogram::Unit::percentage); + LiteralStringRef("buildFillPct"), levelString, Histogram::Unit::percentageLinear); modifyFillPctSketch = Histogram::getHistogram( - LiteralStringRef("modifyFillPct"), levelString, Histogram::Unit::percentage); + LiteralStringRef("modifyFillPct"), levelString, Histogram::Unit::percentageLinear); buildStoredPctSketch = Histogram::getHistogram( - LiteralStringRef("buildStoredPct"), levelString, Histogram::Unit::percentage); + LiteralStringRef("buildStoredPct"), levelString, Histogram::Unit::percentageLinear); modifyStoredPctSketch = Histogram::getHistogram( - LiteralStringRef("modifyStoredPct"), levelString, Histogram::Unit::percentage); + LiteralStringRef("modifyStoredPct"), levelString, Histogram::Unit::percentageLinear); buildItemCountSketch = Histogram::getHistogram( - LiteralStringRef("buildItemCount"), levelString, Histogram::Unit::count, 0, maxRecordCount); + LiteralStringRef("buildItemCount"), levelString, Histogram::Unit::countLinear, 0, maxRecordCount); modifyItemCountSketch = Histogram::getHistogram( - LiteralStringRef("modifyItemCount"), levelString, Histogram::Unit::count, 0, maxRecordCount); + LiteralStringRef("modifyItemCount"), levelString, Histogram::Unit::countLinear, 0, maxRecordCount); } buildFillPctSketch->clear(); @@ -10108,7 +10108,7 @@ TEST_CASE(":/redwood/performance/histogramThroughput") { std::cout << "Histogram Unit percentage: " << std::endl; auto t_start = std::chrono::high_resolution_clock::now(); Reference h = Histogram::getHistogram( - LiteralStringRef("histogramTest"), LiteralStringRef("counts"), Histogram::Unit::percentage); + LiteralStringRef("histogramTest"), LiteralStringRef("counts"), Histogram::Unit::percentageLinaer); ASSERT(uniform.size() == inputSize); for (size_t i = 0; i < uniform.size(); i++) { h->samplePercentage((double)uniform[i] / UINT32_MAX); diff --git a/flow/Histogram.cpp b/flow/Histogram.cpp index 3cf4ddb158..f9a257f2e5 100644 --- a/flow/Histogram.cpp +++ b/flow/Histogram.cpp @@ -131,10 +131,10 @@ void Histogram::writeToLog() { case Unit::bytes_per_second: e.detail(format("LessThan%" PRIu64, value), buckets[i]); break; - case Unit::percentage: + case Unit::percentageLinear: e.detail(format("LessThan%f", (i + 1) * 0.04), buckets[i]); break; - case Unit::count: + case Unit::countLinear: value = uint64_t((i + 1) * ((upperBound - lowerBound) / 31.0)); e.detail(format("LessThan%" PRIu64, value), buckets[i]); break; diff --git a/flow/Histogram.h b/flow/Histogram.h index 5fa32dbb69..3b183f4e41 100644 --- a/flow/Histogram.h +++ b/flow/Histogram.h @@ -59,7 +59,7 @@ HistogramRegistry& GetHistogramRegistry(); */ class Histogram final : public ReferenceCounted { public: - enum class Unit { microseconds = 0, bytes, bytes_per_second, percentage, count, MAXHISTOGRAMUNIT }; + enum class Unit { microseconds = 0, bytes, bytes_per_second, percentageLinear, countLinear, MAXHISTOGRAMUNIT }; static const char* const UnitToStringMapper[]; private: From e0acce98abba711bb77aeab23ca16fc68257b312 Mon Sep 17 00:00:00 2001 From: Fuheng Zhao Date: Thu, 26 Aug 2021 13:15:05 -0700 Subject: [PATCH 13/14] format --- fdbserver/VersionedBTree.actor.cpp | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/fdbserver/VersionedBTree.actor.cpp b/fdbserver/VersionedBTree.actor.cpp index 4536ac9beb..9a0ca9c1a4 100644 --- a/fdbserver/VersionedBTree.actor.cpp +++ b/fdbserver/VersionedBTree.actor.cpp @@ -10114,26 +10114,23 @@ TEST_CASE(":/redwood/performance/histogramThroughput") { { // Time needed to log 33 histograms. std::vector> histograms; - for(int i = 0; i<33; i++){ + for (int i = 0; i < 33; i++) { std::string levelString = "L" + std::to_string(i); - histograms.push_back( - Histogram::getHistogram( - LiteralStringRef("histogramTest"), LiteralStringRef("levelString"), Histogram::Unit::bytes) - ); + histograms.push_back(Histogram::getHistogram( + LiteralStringRef("histogramTest"), LiteralStringRef("levelString"), Histogram::Unit::bytes)); } - for(int i = 0; i<33; i++){ - for(int j = 0; j<32; j++){ + for (int i = 0; i < 33; i++) { + for (int j = 0; j < 32; j++) { histograms[i]->sample(std::pow(2, j)); } } auto t_start = std::chrono::high_resolution_clock::now(); - for(int i = 0; i<33; i++){ + for (int i = 0; i < 33; i++) { histograms[i]->writeToLog(30.0); } auto t_end = std::chrono::high_resolution_clock::now(); double elapsed_time_ms = std::chrono::duration(t_end - t_start).count(); std::cout << "Time needed to log 33 histograms (millisecond): " << elapsed_time_ms << std::endl; - } { std::cout << "Histogram Unit bytes" << std::endl; @@ -10158,7 +10155,7 @@ TEST_CASE(":/redwood/performance/histogramThroughput") { std::cout << "Histogram Unit percentage: " << std::endl; auto t_start = std::chrono::high_resolution_clock::now(); Reference h = Histogram::getHistogram( - LiteralStringRef("histogramTest"), LiteralStringRef("counts"), Histogram::Unit::percentageLinaer); + LiteralStringRef("histogramTest"), LiteralStringRef("counts"), Histogram::Unit::percentageLinear); ASSERT(uniform.size() == inputSize); for (size_t i = 0; i < uniform.size(); i++) { h->samplePercentage((double)uniform[i] / UINT32_MAX); From 94c3cb3086a4ddc379f77cda1bf5e79924949c9b Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Mon, 23 Aug 2021 15:17:31 -0700 Subject: [PATCH 14/14] Create the logs directory for FDB processes in the correct place --- packaging/docker/release/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/docker/release/Dockerfile b/packaging/docker/release/Dockerfile index ad506e620d..c684124fe0 100644 --- a/packaging/docker/release/Dockerfile +++ b/packaging/docker/release/Dockerfile @@ -73,7 +73,7 @@ RUN /var/fdb/scripts/download_multiversion_libraries.bash $FDB_WEBSITE $FDB_ADDI RUN rm -rf /mnt/website -RUN mkdir -p logs +RUN mkdir -p /var/fdb/logs VOLUME /var/fdb/data