changeset 569:8a0323e7e0ac

Use agent-id and vm-id as partial keys AGENT_ID and VM_ID were supposed to have been partial keys all along, but somehow they never were. Fix that. Reviewed-by: jerboaa, vanaltj Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2012-August/002947.html
author Omair Majid <omajid@redhat.com>
date Wed, 29 Aug 2012 14:32:51 -0400
parents 5451224fbd0e
children 7d4bdce24e21
files common/core/src/main/java/com/redhat/thermostat/common/storage/Chunk.java common/core/src/main/java/com/redhat/thermostat/common/storage/Key.java common/core/src/main/java/com/redhat/thermostat/common/storage/MongoStorage.java common/core/src/test/java/com/redhat/thermostat/common/dao/CpuStatDAOTest.java common/core/src/test/java/com/redhat/thermostat/common/dao/HeapDAOTest.java common/core/src/test/java/com/redhat/thermostat/common/dao/HostInfoDAOTest.java common/core/src/test/java/com/redhat/thermostat/common/dao/MemoryStatDAOTest.java common/core/src/test/java/com/redhat/thermostat/common/dao/NetworkInterfaceInfoDAOTest.java common/core/src/test/java/com/redhat/thermostat/common/dao/VmClassStatConverterTest.java common/core/src/test/java/com/redhat/thermostat/common/dao/VmClassStatDAOTest.java common/core/src/test/java/com/redhat/thermostat/common/dao/VmCpuStatConverterTest.java common/core/src/test/java/com/redhat/thermostat/common/dao/VmCpuStatDAOTest.java common/core/src/test/java/com/redhat/thermostat/common/dao/VmGcStatConverterTest.java common/core/src/test/java/com/redhat/thermostat/common/dao/VmGcStatDAOTest.java common/core/src/test/java/com/redhat/thermostat/common/dao/VmInfoDAOTest.java common/core/src/test/java/com/redhat/thermostat/common/dao/VmMemoryStatConverterTest.java common/core/src/test/java/com/redhat/thermostat/common/dao/VmMemoryStatDAOTest.java common/core/src/test/java/com/redhat/thermostat/common/storage/KeyTest.java
diffstat 18 files changed, 55 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- a/common/core/src/main/java/com/redhat/thermostat/common/storage/Chunk.java	Wed Aug 22 14:52:00 2012 +0200
+++ b/common/core/src/main/java/com/redhat/thermostat/common/storage/Chunk.java	Wed Aug 29 14:32:51 2012 -0400
@@ -100,4 +100,9 @@
         return Objects.equals(this.category, other.category) && Objects.equals(this.values, other.values);
     }
 
+    @Override
+    public String toString() {
+        return "Chunk: " + category.getName() + values.toString();
+    }
+
 }
--- a/common/core/src/main/java/com/redhat/thermostat/common/storage/Key.java	Wed Aug 22 14:52:00 2012 +0200
+++ b/common/core/src/main/java/com/redhat/thermostat/common/storage/Key.java	Wed Aug 29 14:32:51 2012 -0400
@@ -44,8 +44,8 @@
 
     // Keys used by most Categories.
     public static final Key<Long> TIMESTAMP = new Key<>("timestamp", false);
-    public static final Key<String> AGENT_ID = new Key<>("agent-id", false);
-    public static final Key<Integer> VM_ID = new Key<>("vm-id", false);
+    public static final Key<String> AGENT_ID = new Key<>("agent-id", true);
+    public static final Key<Integer> VM_ID = new Key<>("vm-id", true);
     public static final Key<String> WHERE = new Key<>("$where", false);
     public static final Key<String> ID = new Key<>("_id", false);
 
--- a/common/core/src/main/java/com/redhat/thermostat/common/storage/MongoStorage.java	Wed Aug 22 14:52:00 2012 +0200
+++ b/common/core/src/main/java/com/redhat/thermostat/common/storage/MongoStorage.java	Wed Aug 29 14:32:51 2012 -0400
@@ -141,7 +141,7 @@
                 BasicDBObject nested = nestedParts.get(entryParts[0]);
                 if (nested == null) {
                     if (isKey) {
-                        throwMissingKey(key.getName());
+                        throwMissingKey(key.getName(), chunk);
                     }
                     nested = new BasicDBObject();
                     nestedParts.put(entryParts[0], nested);
@@ -156,11 +156,12 @@
                     replaceKeyNested.append(entryParts[1], replaceKeyNested);
                 }
             } else {
+                /* we dont modify agent id, and it's already used as key in updateKey */
                 if (!key.equals(Key.AGENT_ID)) {
                     String mongoKey = key.getName();
                     Object value = chunk.get(key);
                     if ((value == null) && isKey) {
-                        throwMissingKey(key.getName());
+                        throwMissingKey(key.getName(), chunk);
                     }
                     toInsert.append(mongoKey, value);
                     if (replace && isKey) {
@@ -197,7 +198,7 @@
                 BasicDBObject nested = nestedParts.get(entryParts[0]);
                 if (nested == null) {
                     if (isKey) {
-                        throwMissingKey(key.getName());
+                        throwMissingKey(key.getName(), chunk);
                     }
                 } else {
                     if (isKey) {
@@ -213,16 +214,19 @@
                 }
             } else {
                 String mongoKey = key.getName();
-                Object value = chunk.get(key);
-                if (value == null) {
-                    if (isKey) {
-                        throwMissingKey(key.getName());
-                    }
-                } else {
-                    if (isKey) {
-                        updateKey.append(mongoKey, value);
+                /* we dont modify agent id, and it's already used as key in updateKey */
+                if (!key.equals(Key.AGENT_ID)) {
+                    Object value = chunk.get(key);
+                    if (value == null) {
+                        if (isKey) {
+                            throwMissingKey(key.getName(), chunk);
+                        }
                     } else {
-                        toUpdate.append(SET_MODIFIER, new BasicDBObject(mongoKey, value));
+                        if (isKey) {
+                            updateKey.append(mongoKey, value);
+                        } else {
+                            toUpdate.append(SET_MODIFIER, new BasicDBObject(mongoKey, value));
+                        }
                     }
                 }
             }
@@ -236,8 +240,8 @@
         coll.update(updateKey, toUpdate);
     }
 
-    private void throwMissingKey(String keyName) {
-        throw new IllegalArgumentException("Attempt to insert chunk with incomplete partial key.  Missing: " + keyName);
+    private void throwMissingKey(String keyName, Chunk chunk) {
+        throw new IllegalArgumentException("Attempt to insert chunk with incomplete partial key.  Missing: '" + keyName + "' in " + chunk);
     }
 
     private DBCollection getCachedCollection(String collName) {
--- a/common/core/src/test/java/com/redhat/thermostat/common/dao/CpuStatDAOTest.java	Wed Aug 22 14:52:00 2012 +0200
+++ b/common/core/src/test/java/com/redhat/thermostat/common/dao/CpuStatDAOTest.java	Wed Aug 29 14:32:51 2012 -0400
@@ -67,7 +67,7 @@
     public void testCategory() {
         assertEquals("cpu-stats", CpuStatDAO.cpuStatCategory.getName());
         Collection<Key<?>> keys = CpuStatDAO.cpuStatCategory.getKeys();
-        assertTrue(keys.contains(new Key<>("agent-id", false)));
+        assertTrue(keys.contains(new Key<>("agent-id", true)));
         assertTrue(keys.contains(new Key<Long>("timestamp", false)));
         assertTrue(keys.contains(new Key<Double>("processor-usage", false)));
 
--- a/common/core/src/test/java/com/redhat/thermostat/common/dao/HeapDAOTest.java	Wed Aug 22 14:52:00 2012 +0200
+++ b/common/core/src/test/java/com/redhat/thermostat/common/dao/HeapDAOTest.java	Wed Aug 29 14:32:51 2012 -0400
@@ -187,8 +187,8 @@
         Collection<Key<?>> keys = category.getKeys();
         assertEquals(6, keys.size());
         assertTrue(keys.contains(new Key<>("_id", false)));
-        assertTrue(keys.contains(new Key<>("agent-id", false)));
-        assertTrue(keys.contains(new Key<>("vm-id", false)));
+        assertTrue(keys.contains(new Key<>("agent-id", true)));
+        assertTrue(keys.contains(new Key<>("vm-id", true)));
         assertTrue(keys.contains(new Key<>("timestamp", false)));
         assertTrue(keys.contains(new Key<>("heap-dump-id", false)));
         assertTrue(keys.contains(new Key<>("histogram-id", false)));
--- a/common/core/src/test/java/com/redhat/thermostat/common/dao/HostInfoDAOTest.java	Wed Aug 22 14:52:00 2012 +0200
+++ b/common/core/src/test/java/com/redhat/thermostat/common/dao/HostInfoDAOTest.java	Wed Aug 29 14:32:51 2012 -0400
@@ -72,7 +72,7 @@
     public void testCategory() {
         assertEquals("host-info", HostInfoDAO.hostInfoCategory.getName());
         Collection<Key<?>> keys = HostInfoDAO.hostInfoCategory.getKeys();
-        assertTrue(keys.contains(new Key<>("agent-id", false)));
+        assertTrue(keys.contains(new Key<>("agent-id", true)));
         assertTrue(keys.contains(new Key<String>("hostname", true)));
         assertTrue(keys.contains(new Key<String>("os_name", false)));
         assertTrue(keys.contains(new Key<String>("os_kernel", false)));
--- a/common/core/src/test/java/com/redhat/thermostat/common/dao/MemoryStatDAOTest.java	Wed Aug 22 14:52:00 2012 +0200
+++ b/common/core/src/test/java/com/redhat/thermostat/common/dao/MemoryStatDAOTest.java	Wed Aug 29 14:32:51 2012 -0400
@@ -74,7 +74,7 @@
     public void testCategory() {
         assertEquals("memory-stats", MemoryStatDAO.memoryStatCategory.getName());
         Collection<Key<?>> keys = MemoryStatDAO.memoryStatCategory.getKeys();
-        assertTrue(keys.contains(new Key<>("agent-id", false)));
+        assertTrue(keys.contains(new Key<>("agent-id", true)));
         assertTrue(keys.contains(new Key<Long>("timestamp", false)));
         assertTrue(keys.contains(new Key<Long>("total", false)));
         assertTrue(keys.contains(new Key<Long>("free", false)));
--- a/common/core/src/test/java/com/redhat/thermostat/common/dao/NetworkInterfaceInfoDAOTest.java	Wed Aug 22 14:52:00 2012 +0200
+++ b/common/core/src/test/java/com/redhat/thermostat/common/dao/NetworkInterfaceInfoDAOTest.java	Wed Aug 29 14:32:51 2012 -0400
@@ -69,7 +69,7 @@
 
         assertEquals("network-info", NetworkInterfaceInfoDAO.networkInfoCategory.getName());
         keys = NetworkInterfaceInfoDAO.networkInfoCategory.getKeys();
-        assertTrue(keys.contains(new Key<>("agent-id", false)));
+        assertTrue(keys.contains(new Key<>("agent-id", true)));
         assertTrue(keys.contains(new Key<Long>("timestamp", false)));
         assertTrue(keys.contains(new Key<String>("iface", true)));
         assertTrue(keys.contains(new Key<String>("ipv4addr", false)));
--- a/common/core/src/test/java/com/redhat/thermostat/common/dao/VmClassStatConverterTest.java	Wed Aug 22 14:52:00 2012 +0200
+++ b/common/core/src/test/java/com/redhat/thermostat/common/dao/VmClassStatConverterTest.java	Wed Aug 29 14:32:51 2012 -0400
@@ -55,7 +55,7 @@
 
         assertEquals("vm-class-stats", chunk.getCategory().getName());
         assertEquals((Long) 1234L, chunk.get(Key.TIMESTAMP));
-        assertEquals((Integer) 123, chunk.get(new Key<Integer>("vm-id", false)));
+        assertEquals((Integer) 123, chunk.get(new Key<Integer>("vm-id", true)));
         assertEquals((Long) 12345L, chunk.get(new Key<Long>("loadedClasses", false)));
     }
 
--- a/common/core/src/test/java/com/redhat/thermostat/common/dao/VmClassStatDAOTest.java	Wed Aug 22 14:52:00 2012 +0200
+++ b/common/core/src/test/java/com/redhat/thermostat/common/dao/VmClassStatDAOTest.java	Wed Aug 29 14:32:51 2012 -0400
@@ -67,8 +67,8 @@
     public void testCategory() {
         assertEquals("vm-class-stats", VmClassStatDAO.vmClassStatsCategory.getName());
         Collection<Key<?>> keys = VmClassStatDAO.vmClassStatsCategory.getKeys();
-        assertTrue(keys.contains(new Key<>("agent-id", false)));
-        assertTrue(keys.contains(new Key<Integer>("vm-id", false)));
+        assertTrue(keys.contains(new Key<>("agent-id", true)));
+        assertTrue(keys.contains(new Key<Integer>("vm-id", true)));
         assertTrue(keys.contains(new Key<Long>("timestamp", false)));
         assertTrue(keys.contains(new Key<Long>("loadedClasses", false)));
         assertEquals(4, keys.size());
--- a/common/core/src/test/java/com/redhat/thermostat/common/dao/VmCpuStatConverterTest.java	Wed Aug 22 14:52:00 2012 +0200
+++ b/common/core/src/test/java/com/redhat/thermostat/common/dao/VmCpuStatConverterTest.java	Wed Aug 29 14:32:51 2012 -0400
@@ -58,7 +58,7 @@
         assertNotNull(chunk);
         assertEquals("vm-cpu-stats", chunk.getCategory().getName());
         assertEquals((Long)TIMESTAMP, chunk.get(Key.TIMESTAMP));
-        assertEquals((Integer) VM_ID, chunk.get(new Key<Long>("vm-id", false)));
+        assertEquals((Integer) VM_ID, chunk.get(new Key<Long>("vm-id", true)));
         assertEquals(PROCESSOR_USAGE, chunk.get(new Key<Double>("processor-usage", false)), 0.001);
 
     }
--- a/common/core/src/test/java/com/redhat/thermostat/common/dao/VmCpuStatDAOTest.java	Wed Aug 22 14:52:00 2012 +0200
+++ b/common/core/src/test/java/com/redhat/thermostat/common/dao/VmCpuStatDAOTest.java	Wed Aug 29 14:32:51 2012 -0400
@@ -80,9 +80,9 @@
     public void testCategory() {
         assertEquals("vm-cpu-stats", VmCpuStatDAO.vmCpuStatCategory.getName());
         Collection<Key<?>> keys = VmCpuStatDAO.vmCpuStatCategory.getKeys();
-        assertTrue(keys.contains(new Key<>("agent-id", false)));
+        assertTrue(keys.contains(new Key<>("agent-id", true)));
         assertTrue(keys.contains(new Key<Long>("timestamp", false)));
-        assertTrue(keys.contains(new Key<Integer>("vm-id", false)));
+        assertTrue(keys.contains(new Key<Integer>("vm-id", true)));
         assertTrue(keys.contains(new Key<Integer>("processor-usage", false)));
         assertEquals(4, keys.size());
     }
--- a/common/core/src/test/java/com/redhat/thermostat/common/dao/VmGcStatConverterTest.java	Wed Aug 22 14:52:00 2012 +0200
+++ b/common/core/src/test/java/com/redhat/thermostat/common/dao/VmGcStatConverterTest.java	Wed Aug 29 14:32:51 2012 -0400
@@ -60,7 +60,7 @@
         assertNotNull(chunk);
         assertEquals("vm-gc-stats", chunk.getCategory().getName());
         assertEquals(TIMESTAMP, chunk.get(new Key<Long>("timestamp", false)));
-        assertEquals(VM_ID, chunk.get(new Key<Integer>("vm-id", false)));
+        assertEquals(VM_ID, chunk.get(new Key<Integer>("vm-id", true)));
         assertEquals(COLLECTOR, chunk.get(new Key<String>("collector", false)));
         assertEquals(RUN_COUNT, chunk.get(new Key<Long>("runtime-count", false)));
         assertEquals(WALL_TIME, chunk.get(new Key<Long>("wall-time", false)));
--- a/common/core/src/test/java/com/redhat/thermostat/common/dao/VmGcStatDAOTest.java	Wed Aug 22 14:52:00 2012 +0200
+++ b/common/core/src/test/java/com/redhat/thermostat/common/dao/VmGcStatDAOTest.java	Wed Aug 29 14:32:51 2012 -0400
@@ -70,8 +70,8 @@
     public void testCategory() {
         assertEquals("vm-gc-stats", VmGcStatDAO.vmGcStatCategory.getName());
         Collection<Key<?>> keys = VmGcStatDAO.vmGcStatCategory.getKeys();
-        assertTrue(keys.contains(new Key<>("agent-id", false)));
-        assertTrue(keys.contains(new Key<Integer>("vm-id", false)));
+        assertTrue(keys.contains(new Key<>("agent-id", true)));
+        assertTrue(keys.contains(new Key<Integer>("vm-id", true)));
         assertTrue(keys.contains(new Key<Long>("timestamp", false)));
         assertTrue(keys.contains(new Key<String>("collector", false)));
         assertTrue(keys.contains(new Key<Long>("runtime-count", false)));
--- a/common/core/src/test/java/com/redhat/thermostat/common/dao/VmInfoDAOTest.java	Wed Aug 22 14:52:00 2012 +0200
+++ b/common/core/src/test/java/com/redhat/thermostat/common/dao/VmInfoDAOTest.java	Wed Aug 29 14:32:51 2012 -0400
@@ -109,7 +109,7 @@
     public void testCategory() {
         assertEquals("vm-info", VmInfoDAO.vmInfoCategory.getName());
         Collection<Key<?>> keys = VmInfoDAO.vmInfoCategory.getKeys();
-        assertTrue(keys.contains(new Key<>("agent-id", false)));
+        assertTrue(keys.contains(new Key<>("agent-id", true)));
         assertTrue(keys.contains(new Key<Integer>("vm-id", true)));
         assertTrue(keys.contains(new Key<Integer>("vm-pid", false)));
         assertTrue(keys.contains(new Key<String>("runtime-version", false)));
--- a/common/core/src/test/java/com/redhat/thermostat/common/dao/VmMemoryStatConverterTest.java	Wed Aug 22 14:52:00 2012 +0200
+++ b/common/core/src/test/java/com/redhat/thermostat/common/dao/VmMemoryStatConverterTest.java	Wed Aug 29 14:32:51 2012 -0400
@@ -88,7 +88,7 @@
 
         assertNotNull(chunk);
         assertEquals((Long) 1l, chunk.get(new Key<Long>("timestamp", false)));
-        assertEquals((Integer) 2, chunk.get(new Key<Integer>("vm-id", false)));
+        assertEquals((Integer) 2, chunk.get(new Key<Integer>("vm-id", true)));
         assertEquals("new", chunk.get(new Key<String>("eden.gen", false)));
         assertEquals("new", chunk.get(new Key<String>("eden.collector", false)));
         assertEquals((Long) 0l, chunk.get(new Key<Long>("eden.used", false)));
--- a/common/core/src/test/java/com/redhat/thermostat/common/dao/VmMemoryStatDAOTest.java	Wed Aug 22 14:52:00 2012 +0200
+++ b/common/core/src/test/java/com/redhat/thermostat/common/dao/VmMemoryStatDAOTest.java	Wed Aug 29 14:32:51 2012 -0400
@@ -116,8 +116,8 @@
 
         assertEquals("vm-memory-stats", VmMemoryStatDAO.vmMemoryStatsCategory.getName());
         keys = VmMemoryStatDAO.vmMemoryStatsCategory.getKeys();
-        assertTrue(keys.contains(new Key<>("agent-id", false)));
-        assertTrue(keys.contains(new Key<Integer>("vm-id", false)));
+        assertTrue(keys.contains(new Key<>("agent-id", true)));
+        assertTrue(keys.contains(new Key<Integer>("vm-id", true)));
         assertTrue(keys.contains(new Key<Long>("timestamp", false)));
         assertTrue(keys.contains(new Key<String>("eden.gen", false)));
         assertTrue(keys.contains(new Key<String>("eden.collector", false)));
@@ -234,7 +234,7 @@
 
         assertEquals(VmMemoryStatDAO.vmMemoryStatsCategory, chunk.getCategory());
         assertEquals((Long) 1l, chunk.get(new Key<Long>("timestamp", false)));
-        assertEquals((Integer) 2, chunk.get(new Key<Integer>("vm-id", false)));
+        assertEquals((Integer) 2, chunk.get(new Key<Integer>("vm-id", true)));
         assertEquals("new", chunk.get(new Key<String>("eden.gen", false)));
         assertEquals("new", chunk.get(new Key<String>("eden.collector", false)));
         assertEquals((Long) 0l, chunk.get(new Key<Long>("eden.used", false)));
--- a/common/core/src/test/java/com/redhat/thermostat/common/storage/KeyTest.java	Wed Aug 22 14:52:00 2012 +0200
+++ b/common/core/src/test/java/com/redhat/thermostat/common/storage/KeyTest.java	Wed Aug 29 14:32:51 2012 -0400
@@ -130,4 +130,14 @@
         String string1 = key1.toString();
         assertEquals(string1, "Key: key1");
     }
+
+    @Test
+    public void verifyAgentIdIsPartialkey() {
+        assertTrue(Key.AGENT_ID.isPartialCategoryKey());
+    }
+
+    @Test
+    public void verifyVmIdIsPartialkey() {
+        assertTrue(Key.VM_ID.isPartialCategoryKey());
+    }
 }