From f7b1d683e9988e7d25e7c5bf94dbcbd5f3705dea Mon Sep 17 00:00:00 2001 From: Michael Davis <michael.davis@cern.ch> Date: Fri, 16 Aug 2019 10:04:28 +0200 Subject: [PATCH] Removes NOT NULL constraint on the CHECKSUM_BLOB column If CHECKSUM_BLOB is NULL, the code will fall back on CHECKSUM_ADLER32. --- catalogue/common_catalogue_schema.sql | 2 +- common/checksum/ChecksumBlob.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/catalogue/common_catalogue_schema.sql b/catalogue/common_catalogue_schema.sql index 2c7e87a7f3..d6614edcf0 100644 --- a/catalogue/common_catalogue_schema.sql +++ b/catalogue/common_catalogue_schema.sql @@ -168,7 +168,7 @@ CREATE TABLE ARCHIVE_FILE( DISK_FILE_UID NUMERIC(20, 0) CONSTRAINT ARCHIVE_FILE_DFUID_NN NOT NULL, DISK_FILE_GID NUMERIC(20, 0) CONSTRAINT ARCHIVE_FILE_DFGID_NN NOT NULL, SIZE_IN_BYTES NUMERIC(20, 0) CONSTRAINT ARCHIVE_FILE_SIB_NN NOT NULL, - CHECKSUM_BLOB CHECKSUM_BLOB_TYPE CONSTRAINT ARCHIVE_FILE_CB1_NN NOT NULL, + CHECKSUM_BLOB CHECKSUM_BLOB_TYPE, CHECKSUM_ADLER32 NUMERIC(20, 0) CONSTRAINT ARCHIVE_FILE_CB2_NN NOT NULL, STORAGE_CLASS_ID NUMERIC(20, 0) CONSTRAINT ARCHIVE_FILE_SCI_NN NOT NULL, CREATION_TIME NUMERIC(20, 0) CONSTRAINT ARCHIVE_FILE_CT2_NN NOT NULL, diff --git a/common/checksum/ChecksumBlob.cpp b/common/checksum/ChecksumBlob.cpp index 84b0b646fc..507243fefc 100644 --- a/common/checksum/ChecksumBlob.cpp +++ b/common/checksum/ChecksumBlob.cpp @@ -113,7 +113,9 @@ void ChecksumBlob::deserialize(const std::string &bytearray) { void ChecksumBlob::deserializeOrSetAdler32(const std::string &bytearray, uint32_t adler32) { common::ChecksumBlob p_csb; - if(p_csb.ParseFromString(bytearray)) { + // A NULL value in the CHECKSUM_BLOB column will return an empty bytearray. If the bytearray is empty + // or otherwise invalid, default to using the contents of the CHECKSUM_ADLER32 column. + if(!bytearray.empty() && p_csb.ParseFromString(bytearray)) { ProtobufToChecksumBlob(p_csb, *this); } else { insert(ADLER32, adler32); -- GitLab