Package com.linkedin.databus.client.pub

Source Code of com.linkedin.databus.client.pub.DbusRangePartitionedFilterFactory

package com.linkedin.databus.client.pub;
/*
*
* Copyright 2013 LinkedIn Corp. All rights reserved
*
* 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.
*
*/


import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import com.linkedin.databus.core.data_model.DatabusSubscription;
import com.linkedin.databus.core.data_model.LegacySubscriptionUriCodec;
import com.linkedin.databus.core.data_model.SubscriptionUriCodec;
import com.linkedin.databus.core.util.InvalidConfigException;
import com.linkedin.databus2.core.DatabusException;
import com.linkedin.databus2.core.filter.DbusKeyCompositeFilterConfig;
import com.linkedin.databus2.core.filter.KeyFilterConfigHolder;
import com.linkedin.databus2.core.filter.KeyFilterConfigHolder.PartitionType;

public class DbusRangePartitionedFilterFactory implements
  DbusServerSideFilterFactory
{
  public static final String MODULE = DbusModPartitionedFilterFactory.class.getName();
  public static final Logger LOG = Logger.getLogger(MODULE);
 
  private final List<DatabusSubscription> _subscriptions;
  private final long _rangeWidth;
 
 
  /**
   * Constructs a Range-Partitioned Filter using legacy V2 subscription syntax containing only fully qualified source name
   * E.g : srcUri can be "com.databus.example.person.Person" for Person table
   *
   * @param rangeWidth : Range Size (e.g : 5000000 for 5M shards)
   * @param srcUris Source URIs to be range partitioned.
   *
   */
  public DbusRangePartitionedFilterFactory(long rangeWidth, String ... srcUris) throws DatabusException
  {
    this(rangeWidth, toLegacyUris(srcUris));
  }
 
  /**
   *  Constructs a Range-Partitioned Filter using URI containing legacy V2 subscription syntax with fully qualified source name.
   *  E.g : srcUri can be new URI("com.databus.example.person.Person") for Person table
   * 
   *  @param srcUris Source URIs to be range partitioned.
   */
  public DbusRangePartitionedFilterFactory(long rangeWidth, URI ... srcUris) throws DatabusException
  {
    this(rangeWidth, LegacySubscriptionUriCodec.getInstance(),srcUris);
  }
 
  /**
   *  Constructs a Range-Partitioned Filter using codec passed to decode the subscription
   *
   *  @param codec SubscriptionURICodec to extract subscription for filtering.
   *  @param srcUris Source URIs to be range partitioned.
   */
  public DbusRangePartitionedFilterFactory(long rangeWidth, SubscriptionUriCodec codec, URI ... srcUris) throws DatabusException
  {
    _subscriptions =  new ArrayList<DatabusSubscription>();
    _rangeWidth = rangeWidth;
    for(URI u : srcUris)
    {
      DatabusSubscription s1 =  codec.decode(u);
      _subscriptions.add(s1);
    }
  }
 
  @Override
  public DbusKeyCompositeFilterConfig createServerSideFilter(
      DbusClusterInfo cluster, DbusPartitionInfo partition)
      throws InvalidConfigException
  {
      DbusKeyCompositeFilterConfig.Config compositeConfig = new DbusKeyCompositeFilterConfig.Config();
     
    for (DatabusSubscription s : _subscriptions)
    {
        KeyFilterConfigHolder.Config filterConfig = new KeyFilterConfigHolder.Config();
        filterConfig.setType(PartitionType.RANGE.toString());
        filterConfig.getRange().setSize(_rangeWidth);
        filterConfig.getRange().setPartitions("[" + partition.getPartitionId() + "]");
        compositeConfig.setFilter(s.getLogicalSource().getName(), filterConfig);
    }
   
    DbusKeyCompositeFilterConfig c = new DbusKeyCompositeFilterConfig(compositeConfig.build());
    LOG.info("Generated Mod Partitioned Config for partition (" + partition + ") of cluster (" + cluster + ") is :" + c);
    return c;
 
  }
 
  private static URI[] toLegacyUris(String... srcUris) throws DatabusException
  {
    URI[] uris = new URI[srcUris.length];
    int i = 0;
    try
    {
      for (String s : srcUris)
        uris[i++] = new URI(s);
    } catch (URISyntaxException e) {
      throw new DatabusException(e);
    }
    return uris;
  }

}
TOP

Related Classes of com.linkedin.databus.client.pub.DbusRangePartitionedFilterFactory

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.