Return-Path: X-Original-To: apmail-myriad-commits-archive@minotaur.apache.org Delivered-To: apmail-myriad-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id DA1941890E for ; Mon, 26 Oct 2015 17:33:25 +0000 (UTC) Received: (qmail 25781 invoked by uid 500); 26 Oct 2015 17:33:25 -0000 Delivered-To: apmail-myriad-commits-archive@myriad.apache.org Received: (qmail 25753 invoked by uid 500); 26 Oct 2015 17:33:25 -0000 Mailing-List: contact commits-help@myriad.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@myriad.incubator.apache.org Delivered-To: mailing list commits@myriad.incubator.apache.org Received: (qmail 25744 invoked by uid 99); 26 Oct 2015 17:33:25 -0000 Received: from Unknown (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 26 Oct 2015 17:33:25 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id 4C876180DFA for ; Mon, 26 Oct 2015 17:33:25 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 0.771 X-Spam-Level: X-Spam-Status: No, score=0.771 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, T_RP_MATCHES_RCVD=-0.01, URIBL_BLOCKED=0.001] autolearn=disabled Received: from mx1-us-east.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id HvtwhqrDto0Y for ; Mon, 26 Oct 2015 17:33:12 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-us-east.apache.org (ASF Mail Server at mx1-us-east.apache.org) with SMTP id 21356439B6 for ; Mon, 26 Oct 2015 17:33:12 +0000 (UTC) Received: (qmail 25640 invoked by uid 99); 26 Oct 2015 17:33:11 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 26 Oct 2015 17:33:11 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 46B47E0593; Mon, 26 Oct 2015 17:33:11 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: smarella@apache.org To: commits@myriad.incubator.apache.org Message-Id: <32f63e30f8ae4b2b8590f8b2ab8a1b09@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: =?utf-8?q?incubator-myriad_git_commit=3A_MYRIAD-148_Ability_to_cor?= =?utf-8?q?rectly_serialize_Optional=2E_By_default_Option=E2=80=A6?= Date: Mon, 26 Oct 2015 17:33:11 +0000 (UTC) Repository: incubator-myriad Updated Branches: refs/heads/master 9c7a739f7 -> e0ca4da1d MYRIAD-148 Ability to correctly serialize Optional. By default Option… …al serialized value is just "present" and not a real value (if present). Created custom serializers to serialize value versus state of Optional This closes: #19 Review: https://github.com/apache/incubator-myriad/pull/19 Project: http://git-wip-us.apache.org/repos/asf/incubator-myriad/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-myriad/commit/e0ca4da1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-myriad/tree/e0ca4da1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-myriad/diff/e0ca4da1 Branch: refs/heads/master Commit: e0ca4da1d1b8f96a13577d00ecafe6895a7edbb1 Parents: 9c7a739 Author: Yuliya Feldman Authored: Mon Oct 26 10:29:32 2015 -0700 Committer: Santosh Marella Committed: Mon Oct 26 10:29:32 2015 -0700 ---------------------------------------------------------------------- .../configuration/MyriadConfiguration.java | 6 + .../MyriadExecutorConfiguration.java | 6 + .../configuration/NodeManagerConfiguration.java | 9 ++ .../configuration/OptionalSerializer.java | 126 +++++++++++++++++++ .../configuration/ServiceConfiguration.java | 13 +- 5 files changed, 159 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/e0ca4da1/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/MyriadConfiguration.java ---------------------------------------------------------------------- diff --git a/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/MyriadConfiguration.java b/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/MyriadConfiguration.java index a723cf0..2dc8f02 100644 --- a/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/MyriadConfiguration.java +++ b/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/MyriadConfiguration.java @@ -19,12 +19,16 @@ package com.ebay.myriad.configuration; import com.fasterxml.jackson.annotation.JsonProperty; +import org.codehaus.jackson.map.annotate.JsonSerialize; import com.google.common.base.Optional; import com.google.common.base.Strings; + import org.hibernate.validator.constraints.NotEmpty; import java.util.Map; +import com.ebay.myriad.configuration.OptionalSerializer.OptionalSerializerString; + /** * Myriad Configuration commonly defined in the YML file * mesosMaster: 10.0.2.15:5050 @@ -102,9 +106,11 @@ public class MyriadConfiguration { private String frameworkRole; @JsonProperty + @JsonSerialize(using = OptionalSerializerString.class) private String frameworkUser; @JsonProperty + @JsonSerialize(using = OptionalSerializerString.class) private String frameworkSuperUser; @JsonProperty http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/e0ca4da1/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/MyriadExecutorConfiguration.java ---------------------------------------------------------------------- diff --git a/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/MyriadExecutorConfiguration.java b/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/MyriadExecutorConfiguration.java index 9744348..3d95859 100644 --- a/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/MyriadExecutorConfiguration.java +++ b/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/MyriadExecutorConfiguration.java @@ -18,8 +18,12 @@ */ package com.ebay.myriad.configuration; +import com.ebay.myriad.configuration.OptionalSerializer.OptionalSerializerDouble; +import com.ebay.myriad.configuration.OptionalSerializer.OptionalSerializerString; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.Optional; + +import org.codehaus.jackson.map.annotate.JsonSerialize; import org.hibernate.validator.constraints.NotEmpty; /** @@ -30,6 +34,7 @@ public class MyriadExecutorConfiguration { * Translates to -Xmx for the NodeManager JVM. */ @JsonProperty + @JsonSerialize(using = OptionalSerializerDouble.class) private Double jvmMaxMemoryMB; @JsonProperty @@ -37,6 +42,7 @@ public class MyriadExecutorConfiguration { private String path; @JsonProperty + @JsonSerialize(using = OptionalSerializerString.class) private String nodeManagerUri; public Optional getJvmMaxMemoryMB() { http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/e0ca4da1/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/NodeManagerConfiguration.java ---------------------------------------------------------------------- diff --git a/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/NodeManagerConfiguration.java b/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/NodeManagerConfiguration.java index 84eb219..5398aaf 100644 --- a/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/NodeManagerConfiguration.java +++ b/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/NodeManagerConfiguration.java @@ -18,6 +18,11 @@ */ package com.ebay.myriad.configuration; +import org.codehaus.jackson.map.annotate.JsonSerialize; + +import com.ebay.myriad.configuration.OptionalSerializer.OptionalSerializerBoolean; +import com.ebay.myriad.configuration.OptionalSerializer.OptionalSerializerDouble; +import com.ebay.myriad.configuration.OptionalSerializer.OptionalSerializerString; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.Optional; @@ -46,6 +51,7 @@ public class NodeManagerConfiguration { * Translates to -Xmx for the NodeManager JVM. */ @JsonProperty + @JsonSerialize(using = OptionalSerializerDouble.class) private Double jvmMaxMemoryMB; /** @@ -53,18 +59,21 @@ public class NodeManagerConfiguration { * for NodeManager auxiliary services. */ @JsonProperty + @JsonSerialize(using = OptionalSerializerDouble.class) private Double cpus; /** * Translates to JAVA_OPTS for the NodeManager JVM. */ @JsonProperty + @JsonSerialize(using = OptionalSerializerString.class) private String jvmOpts; /** * Determines if cgroups are enabled for NM or not. */ @JsonProperty + @JsonSerialize(using = OptionalSerializerBoolean.class) private Boolean cgroups; public Optional getJvmMaxMemoryMB() { http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/e0ca4da1/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/OptionalSerializer.java ---------------------------------------------------------------------- diff --git a/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/OptionalSerializer.java b/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/OptionalSerializer.java new file mode 100644 index 0000000..ce7346e --- /dev/null +++ b/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/OptionalSerializer.java @@ -0,0 +1,126 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 com.ebay.myriad.configuration; + +import java.io.IOException; +import java.util.Map; + +import org.codehaus.jackson.JsonFactory; +import org.codehaus.jackson.JsonGenerator; +import org.codehaus.jackson.JsonProcessingException; +import org.codehaus.jackson.map.JsonSerializer; +import org.codehaus.jackson.map.ObjectMapper; +import org.codehaus.jackson.map.SerializerProvider; + +import com.google.common.base.Optional; + +/** + * Custom Serializer that allows to serialize Optional + * today Optional does not serialize value, but just state: "present: true/false" + * This class will serialize value instead of state + * This is needed for REST APIs and Myriad UI + * @param + */ +public class OptionalSerializer extends JsonSerializer> { + + private static final JsonFactory jsonFactory = new ObjectMapper().getJsonFactory(); + + protected ObjectMapper objMapper; + + public OptionalSerializer() { + objMapper = new ObjectMapper(jsonFactory); + } + + @Override + public void serialize(Optional value, + JsonGenerator jgen, SerializerProvider provider) + throws IOException, JsonProcessingException { + if (value.isPresent()) { + objMapper.writeValue(jgen, value.get()); + } else { + objMapper.writeValue(jgen, "value is absent"); + } + } + + /** + * Custom String serializer + * + */ + public static class OptionalSerializerString extends OptionalSerializer { + @Override + public void serialize(Optional value, + JsonGenerator jgen, SerializerProvider provider) throws IOException, + JsonProcessingException { + super.serialize(value, jgen, provider); + } + } + + /** + * Custom Double serializer + * + */ + public static class OptionalSerializerDouble extends OptionalSerializer { + @Override + public void serialize(Optional value, + JsonGenerator jgen, SerializerProvider provider) throws IOException, + JsonProcessingException { + super.serialize(value, jgen, provider); + } + } + + /** + * Custom Integer serializer + * + */ + public static class OptionalSerializerInt extends OptionalSerializer { + @Override + public void serialize(Optional value, + JsonGenerator jgen, SerializerProvider provider) throws IOException, + JsonProcessingException { + super.serialize(value, jgen, provider); + } + } + + /** + * Custom Boolean serializer + * + */ + public static class OptionalSerializerBoolean extends OptionalSerializer { + @Override + public void serialize(Optional value, + JsonGenerator jgen, SerializerProvider provider) throws IOException, + JsonProcessingException { + super.serialize(value, jgen, provider); + } + } + + /** + * Custom Map serializer + * + */ + public static class OptionalSerializerMap extends OptionalSerializer> { + @Override + public void serialize(Optional> value, + JsonGenerator jgen, SerializerProvider provider) throws IOException, + JsonProcessingException { + super.serialize(value, jgen, provider); + } + + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/e0ca4da1/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/ServiceConfiguration.java ---------------------------------------------------------------------- diff --git a/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/ServiceConfiguration.java b/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/ServiceConfiguration.java index 29eef6d..775d4c0 100644 --- a/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/ServiceConfiguration.java +++ b/myriad-scheduler/src/main/java/com/ebay/myriad/configuration/ServiceConfiguration.java @@ -20,10 +20,15 @@ package com.ebay.myriad.configuration; import java.util.Map; +import org.codehaus.jackson.map.annotate.JsonSerialize; import org.hibernate.validator.constraints.NotEmpty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.ebay.myriad.configuration.OptionalSerializer.OptionalSerializerDouble; +import com.ebay.myriad.configuration.OptionalSerializer.OptionalSerializerInt; +import com.ebay.myriad.configuration.OptionalSerializer.OptionalSerializerMap; +import com.ebay.myriad.configuration.OptionalSerializer.OptionalSerializerString; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.Optional; @@ -43,21 +48,25 @@ public class ServiceConfiguration { * Translates to -Xmx for the JVM. */ @JsonProperty + @JsonSerialize(using = OptionalSerializerDouble.class) protected Double jvmMaxMemoryMB; /** * Amount of CPU share given to JVM. */ @JsonProperty + @JsonSerialize(using = OptionalSerializerDouble.class) protected Double cpus; /** * Translates to jvm opts for the JVM. */ @JsonProperty + @JsonSerialize(using = OptionalSerializerString.class) protected String jvmOpts; @JsonProperty + @JsonSerialize(using = OptionalSerializerMap.class) protected Map ports; /** @@ -66,6 +75,7 @@ public class ServiceConfiguration { * we can use this one to have a specific implementation */ @JsonProperty + @JsonSerialize(using = OptionalSerializerString.class) protected String taskFactoryImplName; @JsonProperty @@ -76,9 +86,11 @@ public class ServiceConfiguration { protected String taskName; @JsonProperty + @JsonSerialize(using = OptionalSerializerInt.class) protected Integer maxInstances; @JsonProperty + @JsonSerialize(using = OptionalSerializerString.class) protected String command; @JsonProperty @@ -128,5 +140,4 @@ public class ServiceConfiguration { public String getServiceOpts() { return serviceOptsName; } - }