Package com.linkedin.helix.tools

Source Code of com.linkedin.helix.tools.ClusterViewSerializer

/**
* Copyright (C) 2012 LinkedIn Inc <opensource@linkedin.com>
*
* 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 com.linkedin.helix.tools;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;

import com.linkedin.helix.ClusterView;
import com.linkedin.helix.manager.file.StaticFileHelixManager;

public class ClusterViewSerializer
{
  private static Logger logger = Logger.getLogger(ClusterViewSerializer.class);

  public static void serialize(ClusterView view, File file)
  {
    ObjectMapper mapper = new ObjectMapper();

    SerializationConfig serializationConfig = mapper.getSerializationConfig();
    serializationConfig.set(SerializationConfig.Feature.INDENT_OUTPUT, true);
    serializationConfig.set(SerializationConfig.Feature.AUTO_DETECT_GETTERS, true);
    serializationConfig.set(SerializationConfig.Feature.AUTO_DETECT_FIELDS, true);
    serializationConfig.set(SerializationConfig.Feature.CAN_OVERRIDE_ACCESS_MODIFIERS, true);
    // serializationConfig.set(SerializationConfig.Feature.WRITE_NULL_PROPERTIES, true);

    try
    {
      mapper.writeValue(file, view);
    }
    catch (Exception e)
    {
      logger.error("Error during serialization of data:" + view, e);
    }
  }
 
  public static byte[] serialize(ClusterView view)
  {
    ObjectMapper mapper = new ObjectMapper();

    SerializationConfig serializationConfig = mapper.getSerializationConfig();
    serializationConfig.set(SerializationConfig.Feature.INDENT_OUTPUT, true);
    serializationConfig.set(SerializationConfig.Feature.AUTO_DETECT_GETTERS, true);
    serializationConfig.set(SerializationConfig.Feature.AUTO_DETECT_FIELDS, true);
    serializationConfig.set(SerializationConfig.Feature.CAN_OVERRIDE_ACCESS_MODIFIERS, true);
    // serializationConfig.set(SerializationConfig.Feature.WRITE_NULL_PROPERTIES, true);

    StringWriter sw = new StringWriter();

    try
    {
      mapper.writeValue(sw, view);
      return sw.toString().getBytes();
    }
    catch (Exception e)
    {
      logger.error("Error during serialization of data:" + view, e);
    }

    return new byte[0];
  }

  public static ClusterView deserialize(File file)
  {
    if (!file.exists())
    {
      logger.error(String.format("Static config file \"%s\" doesn't exist", file.getAbsolutePath()));
      return null;
    }

    ObjectMapper mapper = new ObjectMapper();
  
    DeserializationConfig deserializationConfig = mapper.getDeserializationConfig();
    deserializationConfig.set(DeserializationConfig.Feature.AUTO_DETECT_FIELDS, true);
    deserializationConfig.set(DeserializationConfig.Feature.AUTO_DETECT_SETTERS, true);
    // deserializationConfig.set(DeserializationConfig.Feature.CAN_OVERRIDE_ACCESS_MODIFIERS, true);
    deserializationConfig.set(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, true);

    try
    {
      ClusterView view = mapper.readValue(file, ClusterView.class);
      return view;
    }
    catch (Exception e)
    {
      logger.error("Error during deserialization of file:" + file.getAbsolutePath(), e);
    }

    return null;
  }

 
  public static ClusterView deserialize(byte[] bytes)
  {
    ObjectMapper mapper = new ObjectMapper();
    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);

    DeserializationConfig deserializationConfig = mapper.getDeserializationConfig();
    deserializationConfig.set(DeserializationConfig.Feature.AUTO_DETECT_FIELDS, true);
    deserializationConfig.set(DeserializationConfig.Feature.AUTO_DETECT_SETTERS, true);
    // deserializationConfig.set(DeserializationConfig.Feature.CAN_OVERRIDE_ACCESS_MODIFIERS, true);
    deserializationConfig.set(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, true);

    try
    {
      ClusterView view = mapper.readValue(bais, ClusterView.class);
      return view;
    }
    catch (Exception e)
    {
      logger.error("Error during deserialization of bytes:" + new String(bytes), e);
    }

    return null;
  }

  public static void main(String[] args) throws JsonGenerationException,
      JsonMappingException, IOException
  {
    // temporary test only
    // create fake db names and nodes
    List<StaticFileHelixManager.DBParam> dbParams = new ArrayList<StaticFileHelixManager.DBParam>();
    // dbParams.add(new FileBasedClusterManager.DBParam("BizFollow", 1));
    dbParams.add(new StaticFileHelixManager.DBParam("BizProfile_qatest218a", 128));
    // dbParams.add(new FileBasedClusterManager.DBParam("EspressoDB", 10));
    // dbParams.add(new FileBasedClusterManager.DBParam("MailboxDB", 128));
    // dbParams.add(new FileBasedClusterManager.DBParam("MyDB", 8));
    // dbParams.add(new FileBasedClusterManager.DBParam("schemata", 1));
    String[] nodesInfo = { "localhost:8900", "localhost:8901",
                           "localhost:8902", "localhost:8903",
                           "localhost:8904" };
    // String[] nodesInfo = { "esv4-app75.stg.linkedin.com:12918" };
    int replica = 0;

    ClusterView view = StaticFileHelixManager.generateStaticConfigClusterView(nodesInfo, dbParams, replica);
    String file = "/tmp/cluster-view-bizprofile.json";
    // ClusterViewSerializer serializer = new ClusterViewSerializer(file);

    byte[] bytes = ClusterViewSerializer.serialize(view);
    // logger.info("serialized bytes=" );
    // logger.info(new String(bytes));
    System.out.println("serialized bytes=");
    System.out.println(new String(bytes));

    ClusterView restoredView = ClusterViewSerializer.deserialize(bytes);
    // logger.info(restoredView);

    bytes = ClusterViewSerializer.serialize(restoredView);
    // logger.info(new String(bytes));
    System.out.println("restored cluster view=");
    System.out.println(new String(bytes));

  }
}
TOP

Related Classes of com.linkedin.helix.tools.ClusterViewSerializer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.