All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.redhat.lightblue.migrator.features.TogglzRandomUsername Maven / Gradle / Ivy

package com.redhat.lightblue.migrator.features;

import java.util.Random;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Generates random username for togglz gradual activation strategy and stores
 * it in ThreadLocal. Threads are pooled and reused, so you need to call init
 * method each time a decision is to be made where to send the request (source
 * or destination/lightblue). Beginning of a public DAO method is a good place.
 *
 * @author mpatercz
 *
 */
public abstract class TogglzRandomUsername {

    private static final ThreadLocal threadLocalUsername = new ThreadLocal<>();

    private static final Random random = new Random();

    public static final Logger log = LoggerFactory.getLogger(TogglzRandomUsername.class);

    public static void init() {
        // Togglz is calculating a hash value from the username which is then normalized to a value between 0 and 100
        // Considering we're starting from 0-100 value, this is an unnecessary overhead. A price we need to pay for using Togglz
        // to do load balancing...
        String username = Integer.toString(random.nextInt(1000000));
        if (log.isDebugEnabled()) {
            log.debug("Generated username=" + username);
        }
        threadLocalUsername.set(username);
    }

    public static String get() {
        return threadLocalUsername.get();
    }

    public static void remove() {
        threadLocalUsername.remove();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy