From: Marcin Siodelski Date: Thu, 7 Feb 2019 11:59:44 +0000 (+0100) Subject: [#444,!229] Switched back to second precision in MySQL CB. X-Git-Tag: 458-config-backend-support-in-src-lib_base~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d91617106dfc3ec19c7a1d4b2dea0824b7b519f0;p=thirdparty%2Fkea.git [#444,!229] Switched back to second precision in MySQL CB. --- diff --git a/src/lib/cc/stamped_element.cc b/src/lib/cc/stamped_element.cc index c1ce7a3924..32bf59588e 100644 --- a/src/lib/cc/stamped_element.cc +++ b/src/lib/cc/stamped_element.cc @@ -10,12 +10,16 @@ namespace isc { namespace data { StampedElement::StampedElement() - : timestamp_(boost::posix_time::microsec_clock::local_time()) { + /// @todo Change it to microsec_clock once we transition to subsecond + /// precision. + : timestamp_(boost::posix_time::second_clock::local_time()) { } void StampedElement::updateModificationTime() { - setModificationTime(boost::posix_time::microsec_clock::local_time()); + /// @todo Change it to microsec_clock once we transition to subsecond + /// precision. + setModificationTime(boost::posix_time::second_clock::local_time()); } } // end of namespace isc::data diff --git a/src/lib/mysql/mysql_binding.cc b/src/lib/mysql/mysql_binding.cc index ff23a290c3..737623011f 100644 --- a/src/lib/mysql/mysql_binding.cc +++ b/src/lib/mysql/mysql_binding.cc @@ -158,8 +158,11 @@ MySqlBinding::convertToDatabaseTime(const boost::posix_time::ptime& input_time, output_time.hour = input_time.time_of_day().hours(); output_time.minute = input_time.time_of_day().minutes(); output_time.second = input_time.time_of_day().seconds(); - output_time.second_part = input_time.time_of_day().fractional_seconds() - *1000000/time_duration::ticks_per_second(); + /// @todo Use fractional seconds instead of 0 when minimum supported + /// MySQL version has it. + output_time.second_part = 0; +/* output_time.second_part = input_time.time_of_day().fractional_seconds() + *1000000/time_duration::ticks_per_second(); */ output_time.neg = my_bool(0); } @@ -218,7 +221,10 @@ MySqlBinding::convertFromDatabaseTime(const MYSQL_TIME& expire, ptime MySqlBinding::convertFromDatabaseTime(const MYSQL_TIME& database_time) { - long fractional = database_time.second_part * time_duration::ticks_per_second()/1000000; + /// @todo Use fractional seconds instead of 0 when minimum supported + /// MySQL version has it. + long fractional = 0; + // long fractional = database_time.second_part * time_duration::ticks_per_second()/1000000; ptime pt(boost::gregorian::date(database_time.year, boost::gregorian::greg_month(database_time.month), database_time.day), diff --git a/src/lib/mysql/tests/mysql_binding_unittest.cc b/src/lib/mysql/tests/mysql_binding_unittest.cc index 55f63b0deb..776b0ef432 100644 --- a/src/lib/mysql/tests/mysql_binding_unittest.cc +++ b/src/lib/mysql/tests/mysql_binding_unittest.cc @@ -96,7 +96,9 @@ TEST(MySqlBindingTest, defaultTimestamp) { // This test verifies that the binding preserves fractional seconds in // millisecond precision. -TEST(MySqlBindingTest, millisecondTimestampPrecision) { +/// @todo This test is disabled until we decide that the minimum +/// supported MySQL version has a fractional seconds precision. +TEST(MySqlBindingTest, DISABLED_millisecondTimestampPrecision) { // Set timestamp of 2019-01-28 01:12:10.123 // Fractional part depends on the clock resolution. diff --git a/src/lib/mysql/tests/mysql_connection_unittest.cc b/src/lib/mysql/tests/mysql_connection_unittest.cc index 3299698748..6d54857b6b 100644 --- a/src/lib/mysql/tests/mysql_connection_unittest.cc +++ b/src/lib/mysql/tests/mysql_connection_unittest.cc @@ -99,13 +99,19 @@ public: /// The new table contains 6 columns of various data types. All of /// the columns accept null values. void createTestTable() { + /// @todo TIMESTAMP value lacks sub second precision because + /// it is supported since MySQL 5.6.4, which is still not a + /// default version on some OSes. When the subsecond precision + /// is available on all OSes that Kea supports, the timestamp + /// column should be turned to TIMESTAMP(6). Until then, it + /// must remain TIMESTAMP. runQuery("CREATE TABLE IF NOT EXISTS mysql_connection_test (" "tinyint_value TINYINT NULL," "int_value INT NULL," "bigint_value BIGINT NULL," "string_value TEXT NULL," "blob_value BLOB NULL," - "timestamp_value TIMESTAMP(6) NULL" + "timestamp_value TIMESTAMP NULL" ")"); } @@ -236,7 +242,9 @@ TEST_F(MySqlConnectionTest, select) { MySqlBinding::createInteger(-4096), MySqlBinding::createString("shellfish"), MySqlBinding::createBlob(blob.begin(), blob.end()), - MySqlBinding::createTimestamp(boost::posix_time::microsec_clock::local_time()) + /// @todo Change it to microsec_clock once we transition to subsecond + /// precision. + MySqlBinding::createTimestamp(boost::posix_time::second_clock::local_time()) }; testInsertSelect(in_bindings); @@ -252,7 +260,9 @@ TEST_F(MySqlConnectionTest, selectNullInteger) { MySqlBinding::createInteger(-4096), MySqlBinding::createString("shellfish"), MySqlBinding::createBlob(blob.begin(), blob.end()), - MySqlBinding::createTimestamp(boost::posix_time::microsec_clock::local_time()) + /// @todo Change it to microsec_clock once we transition to subsecond + /// precision. + MySqlBinding::createTimestamp(boost::posix_time::second_clock::local_time()) }; testInsertSelect(in_bindings); @@ -269,7 +279,9 @@ TEST_F(MySqlConnectionTest, selectNullString) { MySqlBinding::createInteger(-4096), MySqlBinding::createNull(), MySqlBinding::createBlob(blob.begin(), blob.end()), - MySqlBinding::createTimestamp(boost::posix_time::microsec_clock::local_time()) + /// @todo Change it to microsec_clock once we transition to subsecond + /// precision. + MySqlBinding::createTimestamp(boost::posix_time::second_clock::local_time()) }; testInsertSelect(in_bindings); @@ -284,7 +296,9 @@ TEST_F(MySqlConnectionTest, selectNullBlob) { MySqlBinding::createInteger(-4096), MySqlBinding::createString("shellfish"), MySqlBinding::createNull(), - MySqlBinding::createTimestamp(boost::posix_time::microsec_clock::local_time()) + /// @todo Change it to microsec_clock once we transition to subsecond + /// precision. + MySqlBinding::createTimestamp(boost::posix_time::second_clock::local_time()) }; testInsertSelect(in_bindings); @@ -315,7 +329,9 @@ TEST_F(MySqlConnectionTest, selectEmptyStringBlob) { MySqlBinding::createInteger(-4096), MySqlBinding::createString(""), MySqlBinding::createBlob(blob.begin(), blob.end()), - MySqlBinding::createTimestamp(boost::posix_time::microsec_clock::local_time()) + /// @todo Change it to microsec_clock once we transition to subsecond + /// precision. + MySqlBinding::createTimestamp(boost::posix_time::second_clock::local_time()) }; testInsertSelect(in_bindings); diff --git a/src/share/database/scripts/mysql/dhcpdb_create.mysql b/src/share/database/scripts/mysql/dhcpdb_create.mysql index 5fb00b5021..eacd182f2a 100644 --- a/src/share/database/scripts/mysql/dhcpdb_create.mysql +++ b/src/share/database/scripts/mysql/dhcpdb_create.mysql @@ -1334,91 +1334,13 @@ SET version = '7', minor = '0'; # This line concludes database upgrade to version 7.0. --- ----------------------------------------------------- --- Modify timestamps in the Configuration Backend --- specific tables to use fractional seconds with --- 6 decimal places precision. --- ----------------------------------------------------- - -ALTER TABLE dhcp4_server - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp4_audit - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp4_global_parameter - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp4_global_parameter_server - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp4_option_def - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp4_option_def_server - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp4_shared_network - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp4_shared_network_server - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp4_subnet - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp4_pool - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp4_subnet_server - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; ALTER TABLE dhcp4_options - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL - DEFAULT CURRENT_TIMESTAMP(6); - -ALTER TABLE dhcp4_options_server - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp6_server - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp6_audit - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp6_global_parameter - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp6_global_parameter_server - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp6_option_def - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp6_option_def_server - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp6_shared_network - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp6_shared_network_server - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp6_subnet - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp6_pool - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - -ALTER TABLE dhcp6_subnet_server - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; - + MODIFY COLUMN modification_ts TIMESTAMP NOT NULL + DEFAULT CURRENT_TIMESTAMP; ALTER TABLE dhcp6_options - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL - DEFAULT CURRENT_TIMESTAMP(6); - -ALTER TABLE dhcp6_options_server - MODIFY COLUMN modification_ts TIMESTAMP(6) NOT NULL; + MODIFY COLUMN modification_ts TIMESTAMP NOT NULL + DEFAULT CURRENT_TIMESTAMP; -- ----------------------------------------------------- -- Make sure that constraints on the 7.0 schema tables @@ -1522,7 +1444,7 @@ ALTER TABLE dhcp6_options_server -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS dhcp4_audit_revision ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, - modification_ts TIMESTAMP(6) NOT NULL, + modification_ts TIMESTAMP NOT NULL, log_message TEXT, server_id BIGINT(10) UNSIGNED, PRIMARY KEY (id), @@ -1579,7 +1501,7 @@ ALTER TABLE dhcp4_audit -- ----------------------------------------------------- DROP PROCEDURE IF EXISTS createAuditRevisionDHCP4; DELIMITER $$ -CREATE PROCEDURE createAuditRevisionDHCP4(IN audit_ts TIMESTAMP(6), +CREATE PROCEDURE createAuditRevisionDHCP4(IN audit_ts TIMESTAMP, IN server_tag VARCHAR(256), IN audit_log_message TEXT, IN cascade_transaction TINYINT(1)) diff --git a/src/share/database/scripts/mysql/upgrade_7.0_to_8.0.sh.in b/src/share/database/scripts/mysql/upgrade_7.0_to_8.0.sh.in index d43cc5fab9..3a3446fd6e 100644 --- a/src/share/database/scripts/mysql/upgrade_7.0_to_8.0.sh.in +++ b/src/share/database/scripts/mysql/upgrade_7.0_to_8.0.sh.in @@ -17,91 +17,14 @@ fi mysql "$@" <