Package com.linkedin.databus.client.pub

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

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 DbusModPartitionedFilterFactory implements
    DbusServerSideFilterFactory
{
  public static final String MODULE = DbusModPartitionedFilterFactory.class.getName();
  public static final Logger LOG = Logger.getLogger(MODULE);
 
  private final List<DatabusSubscription> _subscriptions;
 
  /**
   * Constructs a Mod-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 srcUris Source URIs to be mod partitioned.
   *
   */
  public DbusModPartitionedFilterFactory(String ... srcUris) throws DatabusException
  {
    this(toLegacyUris(srcUris));
  }
 
  /**
   *  Constructs a Mod-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 mod partitioned.
   */
  public DbusModPartitionedFilterFactory(URI ... srcUris) throws DatabusException
  {
    this(LegacySubscriptionUriCodec.getInstance(),srcUris);
  }
 
  /**
   *  Constructs a Mod-Partitioned Filter using codec passed to decode the subscription
   *
   *  @param codec  SubscriptionURICodec to extract subscription for filtering.
   *  @param srcUris Source URIs to be mod partitioned.
   */
  public DbusModPartitionedFilterFactory(SubscriptionUriCodec codec, URI ... srcUris) throws DatabusException
  {
    _subscriptions =  new ArrayList<DatabusSubscription>();
    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.MOD.toString());
        filterConfig.getMod().setNumBuckets(cluster.getNumTotalPartitions());
        filterConfig.getMod().setBuckets("[" + 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.DbusModPartitionedFilterFactory

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.