示例#1
0
 public virtual void StopJNs()
 {
     if (mjc != null)
     {
         mjc.Shutdown();
         mjc = null;
     }
 }
示例#2
0
 /// <summary>Starts a cluster using QJM with the defined configuration.</summary>
 /// <exception cref="System.IO.IOException">if there is an I/O error</exception>
 private void StartCluster()
 {
     mjc = new MiniJournalCluster.Builder(conf).Build();
     conf.Set(DFSConfigKeys.DfsNamenodeEditsDirKey, mjc.GetQuorumJournalURI("myjournal"
                                                                            ).ToString());
     cluster = new MiniDFSCluster.Builder(conf).Build();
     cluster.WaitActive();
     fs = cluster.GetFileSystem();
 }
示例#3
0
        public static void AssertExistsInQuorum(MiniJournalCluster cluster, string fname)
        {
            int count = 0;

            for (int i = 0; i < 3; i++)
            {
                FilePath dir = cluster.GetCurrentDir(i, Jid);
                if (new FilePath(dir, fname).Exists())
                {
                    count++;
                }
            }
            NUnit.Framework.Assert.IsTrue("File " + fname + " should exist in a quorum of dirs"
                                          , count >= cluster.GetQuorumSize());
        }
示例#4
0
        /// <exception cref="System.IO.IOException"/>
        public static EditLogOutputStream WriteSegment(MiniJournalCluster cluster, QuorumJournalManager
                                                       qjm, long startTxId, int numTxns, bool finalize)
        {
            EditLogOutputStream stm = qjm.StartLogSegment(startTxId, NameNodeLayoutVersion.CurrentLayoutVersion
                                                          );

            // Should create in-progress
            AssertExistsInQuorum(cluster, NNStorage.GetInProgressEditsFileName(startTxId));
            WriteTxns(stm, startTxId, numTxns);
            if (finalize)
            {
                stm.Close();
                qjm.FinalizeLogSegment(startTxId, startTxId + numTxns - 1);
                return(null);
            }
            else
            {
                return(stm);
            }
        }
示例#5
0
        /// <exception cref="System.IO.IOException"/>
        private MiniQJMHACluster(MiniQJMHACluster.Builder builder)
        {
            this.conf = builder.conf;
            int retryCount = 0;

            while (true)
            {
                try
                {
                    basePort = 10000 + Random.Next(1000) * 4;
                    // start 3 journal nodes
                    journalCluster = new MiniJournalCluster.Builder(conf).Format(true).Build();
                    URI journalURI = journalCluster.GetQuorumJournalURI(Nameservice);
                    // start cluster with 2 NameNodes
                    MiniDFSNNTopology topology = CreateDefaultTopology(basePort);
                    InitHAConf(journalURI, builder.conf);
                    // First start up the NNs just to format the namespace. The MinIDFSCluster
                    // has no way to just format the NameNodes without also starting them.
                    cluster = builder.dfsBuilder.NnTopology(topology).ManageNameDfsSharedDirs(false).
                              Build();
                    cluster.WaitActive();
                    cluster.ShutdownNameNodes();
                    // initialize the journal nodes
                    Configuration confNN0 = cluster.GetConfiguration(0);
                    NameNode.InitializeSharedEdits(confNN0, true);
                    cluster.GetNameNodeInfos()[0].SetStartOpt(builder.startOpt);
                    cluster.GetNameNodeInfos()[1].SetStartOpt(builder.startOpt);
                    // restart the cluster
                    cluster.RestartNameNodes();
                    ++retryCount;
                    break;
                }
                catch (BindException)
                {
                    Log.Info("MiniQJMHACluster port conflicts, retried " + retryCount + " times");
                }
            }
        }
示例#6
0
 public virtual void StartJNs()
 {
     mjc = new MiniJournalCluster.Builder(conf).Build();
 }