Class TabletBalancer

    • Constructor Detail

      • TabletBalancer

        public TabletBalancer()
    • Method Detail

      • init

        public void init​(ServerContext context)
        Initialize the TabletBalancer. This gives the balancer the opportunity to read the configuration.
        Since:
        2.0.0
      • getAssignments

        public abstract void getAssignments​(SortedMap<TServerInstance,​TabletServerStatus> current,
                                            Map<KeyExtent,​TServerInstance> unassigned,
                                            Map<KeyExtent,​TServerInstance> assignments)
        Assign tablets to tablet servers. This method is called whenever the master finds tablets that are unassigned.
        Parameters:
        current - The current table-summary state of all the online tablet servers. Read-only. The TabletServerStatus for each server may be null if the tablet server has not yet responded to a recent request for status.
        unassigned - A map from unassigned tablet to the last known tablet server. Read-only.
        assignments - A map from tablet to assigned server. Write-only.
      • balance

        public abstract long balance​(SortedMap<TServerInstance,​TabletServerStatus> current,
                                     Set<KeyExtent> migrations,
                                     List<TabletMigration> migrationsOut)
        Ask the balancer if any migrations are necessary. If the balancer is going to self-abort due to some environmental constraint (e.g. it requires some minimum number of tservers, or a maximum number of outstanding migrations), it should issue a log message to alert operators. The message should be at WARN normally and at ERROR if the balancer knows that the problem can not self correct. It should not issue these messages more than once a minute.
        Parameters:
        current - The current table-summary state of all the online tablet servers. Read-only.
        migrations - the current set of migrations. Read-only.
        migrationsOut - new migrations to perform; should not contain tablets in the current set of migrations. Write-only.
        Returns:
        the time, in milliseconds, to wait before re-balancing. This method will not be called when there are unassigned tablets.
      • constraintNotMet

        protected void constraintNotMet​(TabletBalancer.BalancerProblem cause)
        Warn that a Balancer can't work because of some external restriction. Will not call the provided logging handler more often than TIME_BETWEEN_BALANCER_WARNINGS
      • resetBalancerErrors

        protected void resetBalancerErrors()
        Resets logging about problems meeting an external constraint on balancing.
      • getOnlineTabletsForTable

        public List<TabletStats> getOnlineTabletsForTable​(TServerInstance tserver,
                                                          TableId tableId)
                                                   throws ThriftSecurityException,
                                                          org.apache.thrift.TException
        Fetch the tablets for the given table by asking the tablet server. Useful if your balance strategy needs details at the tablet level to decide what tablets to move.
        Parameters:
        tserver - The tablet server to ask.
        tableId - The table id
        Returns:
        a list of tablet statistics
        Throws:
        ThriftSecurityException - tablet server disapproves of your internal System password.
        org.apache.thrift.TException - any other problem
      • checkMigrationSanity

        public static List<TabletMigration> checkMigrationSanity​(Set<TServerInstance> current,
                                                                 List<TabletMigration> migrations)
        Utility to ensure that the migrations from balance() are consistent:
        • Tablet objects are not null
        • Source and destination tablet servers are not null and current
        Returns:
        A list of TabletMigration object that passed sanity checks.