You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by wf...@apache.org on 2014/07/17 23:15:35 UTC
git commit: Fix logic error causing new slave attributes to be
discarded.
Repository: incubator-aurora
Updated Branches:
refs/heads/master 065c92700 -> 3f6fba7e9
Fix logic error causing new slave attributes to be discarded.
Bugs closed: AURORA-582
Reviewed at https://reviews.apache.org/r/23653/
Project: http://git-wip-us.apache.org/repos/asf/incubator-aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-aurora/commit/3f6fba7e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-aurora/tree/3f6fba7e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-aurora/diff/3f6fba7e
Branch: refs/heads/master
Commit: 3f6fba7e9be112104e726f25cff1bdb74bcc5b57
Parents: 065c927
Author: Bill Farner <wf...@apache.org>
Authored: Thu Jul 17 14:11:53 2014 -0700
Committer: Bill Farner <wf...@apache.org>
Committed: Thu Jul 17 14:11:53 2014 -0700
----------------------------------------------------------------------
.../storage/mem/MemAttributeStore.java | 28 +++++---
.../storage/mem/MemAttributeStoreTest.java | 67 ++++++++++++++++++++
2 files changed, 87 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/3f6fba7e/src/main/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStore.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStore.java b/src/main/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStore.java
index 4bb807c..82fcddd 100644
--- a/src/main/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStore.java
+++ b/src/main/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStore.java
@@ -39,16 +39,28 @@ class MemAttributeStore implements Mutable {
@Override
public void saveHostAttributes(IHostAttributes attributes) {
- hostAttributes.putIfAbsent(attributes.getHost(), attributes);
+ hostAttributes.put(
+ attributes.getHost(),
+ merge(attributes, Optional.fromNullable(hostAttributes.get(attributes.getHost()))));
+ }
- IHostAttributes stored = hostAttributes.get(attributes.getHost());
- HostAttributes updated = stored.newBuilder();
- if (!stored.isSetMode()) {
- updated.setMode(attributes.isSetMode() ? attributes.getMode() : MaintenanceMode.NONE);
+ private IHostAttributes merge(IHostAttributes newAttributes, Optional<IHostAttributes> previous) {
+ HostAttributes attributes = newAttributes.newBuilder();
+ if (!attributes.isSetMode()) {
+ // If the newly-saved value does not explicitly set the mode, use the previous value
+ // or the default.
+ MaintenanceMode mode;
+ if (previous.isPresent() && previous.get().isSetMode()) {
+ mode = previous.get().getMode();
+ } else {
+ mode = MaintenanceMode.NONE;
+ }
+ attributes.setMode(mode);
+ }
+ if (!attributes.isSetAttributes()) {
+ attributes.setAttributes(ImmutableSet.<Attribute>of());
}
- updated.setAttributes(updated.isSetAttributes()
- ? updated.getAttributes() : ImmutableSet.<Attribute>of());
- hostAttributes.replace(attributes.getHost(), stored, IHostAttributes.build(updated));
+ return IHostAttributes.build(attributes);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/3f6fba7e/src/test/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStoreTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStoreTest.java b/src/test/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStoreTest.java
new file mode 100644
index 0000000..45fa43c
--- /dev/null
+++ b/src/test/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStoreTest.java
@@ -0,0 +1,67 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.aurora.scheduler.storage.mem;
+
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableSet;
+
+import org.apache.aurora.gen.Attribute;
+import org.apache.aurora.gen.HostAttributes;
+import org.apache.aurora.gen.MaintenanceMode;
+import org.apache.aurora.scheduler.storage.AttributeStore;
+import org.apache.aurora.scheduler.storage.entities.IHostAttributes;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class MemAttributeStoreTest {
+
+ private static final IHostAttributes ATTRS = IHostAttributes.build(
+ new HostAttributes()
+ .setHost("hostA")
+ .setSlaveId("slaveA")
+ .setAttributes(ImmutableSet.of(
+ makeAttribute("host", "hostA"),
+ makeAttribute("rack", "rackA")))
+ );
+
+ private AttributeStore.Mutable store;
+
+ @Before
+ public void setUp() {
+ store = new MemAttributeStore();
+ }
+
+ @Test
+ public void testAttributeChange() {
+ store.saveHostAttributes(ATTRS);
+ assertEquals(Optional.of(defaultMode(ATTRS)), store.getHostAttributes(ATTRS.getHost()));
+ HostAttributes builder = ATTRS.newBuilder();
+ builder.addToAttributes(makeAttribute("foo", "bar"));
+ IHostAttributes updated = IHostAttributes.build(builder);
+ store.saveHostAttributes(updated);
+ assertEquals(Optional.of(defaultMode(updated)), store.getHostAttributes(ATTRS.getHost()));
+ }
+
+ private static Attribute makeAttribute(String name, String... values) {
+ return new Attribute()
+ .setName(name)
+ .setValues(ImmutableSet.<String>builder().add(values).build());
+ }
+
+ private static IHostAttributes defaultMode(IHostAttributes attrs) {
+ return IHostAttributes.build(attrs.newBuilder().setMode(MaintenanceMode.NONE));
+ }
+}