Add logging when size limits exceeded.
authorScott Cantor <cantor.2@osu.edu>
Thu, 29 Sep 2011 17:32:35 +0000 (17:32 +0000)
committerScott Cantor <cantor.2@osu.edu>
Thu, 29 Sep 2011 17:32:35 +0000 (17:32 +0000)
xmltooling/impl/MemoryStorageService.cpp
xmltooling/util/StorageService.h

index 60d2c63..546db20 100644 (file)
@@ -47,24 +47,30 @@ namespace xmltooling {
         MemoryStorageService(const DOMElement* e);
         virtual ~MemoryStorageService();
 
-        bool createString(const char* context, const char* key, const char* value, time_t expiration);
-        int readString(const char* context, const char* key, string* pvalue=nullptr, time_t* pexpiration=nullptr, int version=0);
-        int updateString(const char* context, const char* key, const char* value=nullptr, time_t expiration=0, int version=0);
-        bool deleteString(const char* context, const char* key);
-
-        bool createText(const char* context, const char* key, const char* value, time_t expiration) {
-            return createString(context, key, value, expiration);
+        bool createString(const char* context, const char* key, const char* value, time_t expiration) {
+            if (m_log.isDebugEnabled() && value && strlen(value) > 255) {
+                m_log.debug("string value for key (%s) exceeded allowed length", key);
+            }
+            return createText(context, key, value, expiration);
         }
-        int readText(const char* context, const char* key, string* pvalue=nullptr, time_t* pexpiration=nullptr, int version=0) {
-            return readString(context, key, pvalue, pexpiration, version);
+        int readString(const char* context, const char* key, string* pvalue=nullptr, time_t* pexpiration=nullptr, int version=0) {
+            return readText(context, key, pvalue, pexpiration, version);
         }
-        int updateText(const char* context, const char* key, const char* value=nullptr, time_t expiration=0, int version=0) {
-            return updateString(context, key, value, expiration, version);
+        int updateString(const char* context, const char* key, const char* value=nullptr, time_t expiration=0, int version=0) {
+            if (m_log.isDebugEnabled() && value && strlen(value) > 255) {
+                m_log.debug("string value for key (%s) exceeded allowed length", key);
+            }
+            return updateText(context, key, value, expiration, version);
         }
-        bool deleteText(const char* context, const char* key) {
-            return deleteString(context, key);
+        bool deleteString(const char* context, const char* key) {
+            return deleteText(context, key);
         }
 
+        bool createText(const char* context, const char* key, const char* value, time_t expiration);
+        int readText(const char* context, const char* key, string* pvalue=nullptr, time_t* pexpiration=nullptr, int version=0);
+        int updateText(const char* context, const char* key, const char* value=nullptr, time_t expiration=0, int version=0);
+        bool deleteText(const char* context, const char* key);
+
         void reap(const char* context);
         void updateContext(const char* context, time_t expiration);
         void deleteContext(const char* context) {
@@ -212,8 +218,16 @@ unsigned long MemoryStorageService::Context::reap(time_t exp)
     return count;
 }
 
-bool MemoryStorageService::createString(const char* context, const char* key, const char* value, time_t expiration)
+bool MemoryStorageService::createText(const char* context, const char* key, const char* value, time_t expiration)
 {
+    // This doesn't matter for this implementation, but helps identify bugs that might break others.
+    if (m_log.isDebugEnabled()) {
+        if (strlen(context) > 255)
+            m_log.debug("context value (%s) exceeded allowed length", context);
+        if (strlen(key) > 255)
+            m_log.debug("key value (%s) in context (%s) exceeded allowed length", key, context);
+    }
+
     Context& ctx = writeContext(context);
     SharedLock locker(m_lock, false);
 
@@ -233,7 +247,7 @@ bool MemoryStorageService::createString(const char* context, const char* key, co
     return true;
 }
 
-int MemoryStorageService::readString(const char* context, const char* key, string* pvalue, time_t* pexpiration, int version)
+int MemoryStorageService::readText(const char* context, const char* key, string* pvalue, time_t* pexpiration, int version)
 {
     Context& ctx = readContext(context);
     SharedLock locker(m_lock, false);
@@ -252,7 +266,7 @@ int MemoryStorageService::readString(const char* context, const char* key, strin
     return i->second.version;
 }
 
-int MemoryStorageService::updateString(const char* context, const char* key, const char* value, time_t expiration, int version)
+int MemoryStorageService::updateText(const char* context, const char* key, const char* value, time_t expiration, int version)
 {
     Context& ctx = writeContext(context);
     SharedLock locker(m_lock, false);
@@ -278,7 +292,7 @@ int MemoryStorageService::updateString(const char* context, const char* key, con
     return i->second.version;
 }
 
-bool MemoryStorageService::deleteString(const char* context, const char* key)
+bool MemoryStorageService::deleteText(const char* context, const char* key)
 {
     Context& ctx = writeContext(context);
     SharedLock locker(m_lock, false);
index ffbbe35..8bbe681 100644 (file)
@@ -52,7 +52,7 @@ namespace xmltooling {
         /**
          * Creates a new "short" record in the storage service.
          * 
-         * @param context       a storage context label
+         * @param context       a storage context label of up to 255 bytes
          * @param key           null-terminated unique key of up to 255 bytes
          * @param value         null-terminated value of up to 255 bytes to store
          * @param expiration    an expiration timestamp, after which the record can be purged
@@ -67,7 +67,7 @@ namespace xmltooling {
          *
          * <p>The version parameter can be set for "If-Modified-Since" semantics.
          * 
-         * @param context       a storage context label
+         * @param context       a storage context label of up to 255 bytes
          * @param key           null-terminated unique key of up to 255 bytes
          * @param pvalue        location in which to return the record value
          * @param pexpiration   location in which to return the expiration timestamp
@@ -83,7 +83,7 @@ namespace xmltooling {
         /**
          * Updates an existing "short" record in the storage service.
          * 
-         * @param context       a storage context label
+         * @param context       a storage context label of up to 255 bytes
          * @param key           null-terminated unique key of up to 255 bytes
          * @param value         null-terminated value of up to 255 bytes to store, or nullptr to leave alone
          * @param expiration    a new expiration timestamp, or 0 to leave alone
@@ -100,7 +100,7 @@ namespace xmltooling {
         /**
          * Deletes an existing "short" record from the storage service.
          * 
-         * @param context       a storage context label
+         * @param context       a storage context label of up to 255 bytes
          * @param key           null-terminated unique key of up to 255 bytes
          * @return true iff the record existed and was deleted
          *    
@@ -111,7 +111,7 @@ namespace xmltooling {
         /**
          * Creates a new "long" record in the storage service.
          * 
-         * @param context       a storage context label
+         * @param context       a storage context label of up to 255 bytes
          * @param key           null-terminated unique key of up to 255 bytes
          * @param value         null-terminated value of arbitrary length
          * @param expiration    an expiration timestamp, after which the record can be purged
@@ -126,7 +126,7 @@ namespace xmltooling {
          *
          * <p>The version parameter can be set for "If-Modified-Since" semantics.
          * 
-         * @param context       a storage context label
+         * @param context       a storage context label of up to 255 bytes
          * @param key           null-terminated unique key of up to 255 bytes
          * @param pvalue        location in which to return the record value
          * @param pexpiration   location in which to return the expiration timestamp
@@ -142,7 +142,7 @@ namespace xmltooling {
         /**
          * Updates an existing "long" record in the storage service.
          * 
-         * @param context       a storage context label
+         * @param context       a storage context label of up to 255 bytes
          * @param key           null-terminated unique key of up to 255 bytes
          * @param value         null-terminated value of arbitrary length to store, or nullptr to leave alone
          * @param expiration    a new expiration timestamp, or 0 to leave alone
@@ -159,7 +159,7 @@ namespace xmltooling {
         /**
          * Deletes an existing "long" record from the storage service.
          * 
-         * @param context       a storage context label
+         * @param context       a storage context label of up to 255 bytes
          * @param key           null-terminated unique key of up to 255 bytes
          * @return true iff the record existed and was deleted
          *