yea. the fix has already been checked into helix-0.6.x and master branch

On Tue, Dec 16, 2014 at 11:15 AM, kishore g <[email protected]> wrote:
>
> lets do that.
>
> On Tue, Dec 16, 2014 at 11:04 AM, Zhen Zhang <[email protected]> wrote:
>
> > if we are using both resourceName and partitonId for indexing a state
> > model, this problem should be fixed.
> >
> > On Tue, Dec 16, 2014 at 10:25 AM, kishore g <[email protected]> wrote:
> > >
> > > is it possible to completely avoid this scenario in 0.7.1+
> > >
> > > On Tue, Dec 16, 2014 at 10:19 AM, Zhen Zhang (JIRA) <[email protected]>
> > > wrote:
> > >
> > > >
> > > >     [
> > > >
> > >
> >
> https://issues.apache.org/jira/browse/HELIX-561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14248601#comment-14248601
> > > > ]
> > > >
> > > > Zhen Zhang commented on HELIX-561:
> > > > ----------------------------------
> > > >
> > > > [~vinayakb] are you using same partition name for different
> resources?
> > we
> > > > recently fixed a bug (see
> > > https://issues.apache.org/jira/browse/HELIX-552)
> > > > regarding this. Previously a state model is indexed by partition id
> > only
> > > > and the assumption is we use the naming convention like
> > > > resourceName_partitionId. If you are using the same partition name
> for
> > > > different resources, then it's possible that the same state model is
> > > > invoked for different resources.
> > > >
> > > > > Participant receive same transition twice
> > > > > -----------------------------------------
> > > > >
> > > > >                 Key: HELIX-561
> > > > >                 URL:
> https://issues.apache.org/jira/browse/HELIX-561
> > > > >             Project: Apache Helix
> > > > >          Issue Type: Bug
> > > > >            Reporter: Zhen Zhang
> > > > >            Assignee: Zhen Zhang
> > > > >
> > > > > Some user reports that when upgrade from 0.6.x to 0.7.1,
> participant
> > > > receives OFFLINE->SLAVE transition twice for a partition.
> > > > > Can't reproduce it with the following test case:
> > > > > {noformat}
> > > > > package org.apache.helix;
> > > > > import java.util.Date;
> > > > > import org.apache.helix.api.StateTransitionHandlerFactory;
> > > > > import org.apache.helix.api.TransitionHandler;
> > > > > import org.apache.helix.api.id.PartitionId;
> > > > > import org.apache.helix.api.id.ResourceId;
> > > > > import org.apache.helix.api.id.StateModelDefId;
> > > > > import org.apache.helix.manager.zk.MockController;
> > > > > import org.apache.helix.model.Message;
> > > > > import org.apache.helix.participant.statemachine.Transition;
> > > > > import org.apache.helix.testutil.TestUtil;
> > > > > import org.apache.helix.testutil.ZkTestBase;
> > > > > import org.testng.annotations.Test;
> > > > > public class AppTest extends ZkTestBase {
> > > > >   @Test
> > > > >   public void test() throws Exception {
> > > > >     String clusterName = TestUtil.getTestName();
> > > > >     int n = 2;
> > > > >     System.out.println("START " + clusterName + " at " + new
> > > > Date(System.currentTimeMillis()));
> > > > >     TestHelper.setupCluster(clusterName, _zkaddr, 12918, //
> > participant
> > > > port
> > > > >         "localhost", // participant name prefix
> > > > >         "TestDB", // resource name prefix
> > > > >         1, // resources
> > > > >         2, // partitions per resource
> > > > >         n, // number of nodes
> > > > >         2, // replicas
> > > > >         "MasterSlave", true); // do rebalance
> > > > >     MockController controller = new MockController(_zkaddr,
> > > clusterName,
> > > > "controller");
> > > > >     controller.syncStart();
> > > > >     String id = "localhost_12918";
> > > > >     StateModelDefId masterSlave =
> > StateModelDefId.from("MasterSlave");
> > > > >     HelixManager hManager =
> > > > >         HelixManagerFactory.getZKHelixManager(clusterName, id,
> > > > InstanceType.PARTICIPANT, _zkaddr);
> > > > >
> > > >
> > hManager.getStateMachineEngine().registerStateModelFactory(masterSlave,
> > > > >         new MasterSlaveStateModelFactory());
> > > > >     hManager.connect();
> > > > >     System.out.println("END " + clusterName + " at " + new
> > > > Date(System.currentTimeMillis()));
> > > > >   }
> > > > >   class MasterSlaveStateModelFactory extends
> > > > StateTransitionHandlerFactory<MasterSlaveStateModel> {
> > > > >     public MasterSlaveStateModelFactory() {
> > > > >     }
> > > > >     @Override
> > > > >     public MasterSlaveStateModel
> > > createStateTransitionHandler(ResourceId
> > > > resourceId,
> > > > >         PartitionId partitionId) {
> > > > >       return new MasterSlaveStateModel();
> > > > >     }
> > > > >   }
> > > > >   public class MasterSlaveStateModel extends TransitionHandler {
> > > > >     @Transition(to = "SLAVE", from = "OFFLINE")
> > > > >     public void onBecomeSlaveFromOffline(Message message,
> > > > NotificationContext context)
> > > > >         throws Exception {
> > > > >       System.out.println(message.getPartitionName() + ":
> > > > OFFLINE->SLAVE");
> > > > >     }
> > > > >     @Transition(to = "MASTER", from = "SLAVE")
> > > > >     public void onBecomeMasterFromSlave(Message message,
> > > > NotificationContext context)
> > > > >         throws Exception {
> > > > >     }
> > > > >     @Transition(to = "SLAVE", from = "MASTER")
> > > > >     public void onBecomeSlaveFromMaster(Message message,
> > > > NotificationContext context)
> > > > >         throws Exception {
> > > > >     }
> > > > >     @Transition(to = "OFFLINE", from = "SLAVE")
> > > > >     public void onBecomeOfflineFromSlave(Message message,
> > > > NotificationContext context)
> > > > >         throws Exception {
> > > > >     }
> > > > >     @Transition(to = "DROPPED", from = "OFFLINE")
> > > > >     public void onBecomeDroppedFromOffline(Message message,
> > > > NotificationContext context)
> > > > >         throws Exception {
> > > > >     }
> > > > >     @Transition(to = "OFFLINE", from = "ERROR")
> > > > >     public void onBecomeOfflineFromError(Message message,
> > > > NotificationContext context)
> > > > >         throws Exception {
> > > > >     }
> > > > >   }
> > > > > }
> > > > > {noformat}
> > > >
> > > >
> > > >
> > > > --
> > > > This message was sent by Atlassian JIRA
> > > > (v6.3.4#6332)
> > > >
> > >
> >
>

Reply via email to