Beispiel #1
0
 def testGetPart_impossible(self):
     """Test an impossible partitioning"""
     ps = AlignedPartitionStrategy(4, 1000, 3000)
     self.assertEqual( (0, 1000), ps.getPart(0) )
     self.assertEqual( (1000, 1000), ps.getPart(1) )
     self.assertEqual( (2000, 1000), ps.getPart(2) )
     self.assertEqual( (0, 0), ps.getPart(3) )
Beispiel #2
0
 def testGetPart_impossible(self):
     """Test an impossible partitioning"""
     ps = AlignedPartitionStrategy(4, 1000, 3000)
     self.assertEqual((0, 1000), ps.getPart(0))
     self.assertEqual((1000, 1000), ps.getPart(1))
     self.assertEqual((2000, 1000), ps.getPart(2))
     self.assertEqual((0, 0), ps.getPart(3))
Beispiel #3
0
Datei: flow.py Projekt: DaElf/xdd
    def start(self, filename, flowSize, restartFlag=False, restartOffset=0):
        """Start an XDD process to perform work"""
        # Add the final options
        self.target = filename
        self.restart = restartFlag
        self.restartByte = restartOffset

        # If restarting multiple sources, rather than partitioning from the
        # beginning, partition from the restart point
        if self.restart and self.numFlows > 1:
            flowSize -= restartOffset

        # Use a partitioner to convert the flow size into the local flow params
        partitioner = AlignedPartitionStrategy(self.numFlows, 
                                               self.reqSize,
                                               flowSize)
        (self.startOffset, self.dataSize) = partitioner.getPart(self.flowIdx)

        # Check preconditions
        if self.checkPreconditions():
            # Use the file creator for size 0 flows, XDD for everything else
            if 0 == self.dataSize:
                isCreator = (0 == self.flowIdx) and self.isSink
                status = EmptyFileFlowStatus(isCreator, filename, restartFlag)
            else:
                args = self.createCommandArgs()
                try:
                    self.process = subprocess.Popen(args,
                                                    stdout=subprocess.PIPE,
                                                    stderr=subprocess.PIPE)
                    status = XDDFlowStatus(self.process, restartOffset)
                except OSError as e:
                    self.reasons.append("OS Error executing: " + args[0])
                    status = FailedFlowStatus(self.reasons)
                except:     
                    s = "Unknown error: " + str(sys.exc_info()[0])
                    self.reasons.append(s)
                    status = FailedFlowStatus(self.reasons)
        else:
            # Precondition failure
            status = FailedFlowStatus(self.reasons)
        return status
Beispiel #4
0
Datei: flow.py Projekt: yoyz/xdd
    def start(self, filename, flowSize, restartFlag=False, restartOffset=0):
        """Start an XDD process to perform work"""
        # Add the final options
        self.target = filename
        self.restart = restartFlag
        self.restartByte = restartOffset

        # If restarting multiple sources, rather than partitioning from the
        # beginning, partition from the restart point
        if self.restart and self.numFlows > 1:
            flowSize -= restartOffset

        # Use a partitioner to convert the flow size into the local flow params
        partitioner = AlignedPartitionStrategy(self.numFlows, self.reqSize,
                                               flowSize)
        (self.startOffset, self.dataSize) = partitioner.getPart(self.flowIdx)

        # Check preconditions
        if self.checkPreconditions():
            # Use the file creator for size 0 flows, XDD for everything else
            if 0 == self.dataSize:
                isCreator = (0 == self.flowIdx) and self.isSink
                status = EmptyFileFlowStatus(isCreator, filename, restartFlag)
            else:
                args = self.createCommandArgs()
                try:
                    self.process = subprocess.Popen(args,
                                                    stdout=subprocess.PIPE,
                                                    stderr=subprocess.PIPE)
                    status = XDDFlowStatus(self.process, restartOffset)
                except OSError as e:
                    self.reasons.append("OS Error executing: " + args[0])
                    status = FailedFlowStatus(self.reasons)
                except:
                    s = "Unknown error: " + str(sys.exc_info()[0])
                    self.reasons.append(s)
                    status = FailedFlowStatus(self.reasons)
        else:
            # Precondition failure
            status = FailedFlowStatus(self.reasons)
        return status
Beispiel #5
0
 def testGetPart_perfect(self):
     """Test perfect partitioning"""
     ps = AlignedPartitionStrategy(8, 100, 800)
     self.assertEqual((0, 100), ps.getPart(0))
     self.assertEqual((100, 100), ps.getPart(1))
     self.assertEqual((200, 100), ps.getPart(2))
     self.assertEqual((300, 100), ps.getPart(3))
     self.assertEqual((400, 100), ps.getPart(4))
     self.assertEqual((500, 100), ps.getPart(5))
     self.assertEqual((600, 100), ps.getPart(6))
     self.assertEqual((700, 100), ps.getPart(7))
Beispiel #6
0
 def testGetPart_perfect(self):
     """Test perfect partitioning"""
     ps = AlignedPartitionStrategy(8, 100, 800)
     self.assertEqual( (0, 100), ps.getPart(0) )
     self.assertEqual( (100, 100), ps.getPart(1) )
     self.assertEqual( (200, 100), ps.getPart(2) )
     self.assertEqual( (300, 100), ps.getPart(3) )
     self.assertEqual( (400, 100), ps.getPart(4) )
     self.assertEqual( (500, 100), ps.getPart(5) )
     self.assertEqual( (600, 100), ps.getPart(6) )
     self.assertEqual( (700, 100), ps.getPart(7) )
Beispiel #7
0
 def testGetPart_mega(self):
     """Test megabyte partitioning"""
     ps = AlignedPartitionStrategy(1, 32768 * 1024, 1000000)
     self.assertEqual((0, 1000000), ps.getPart(0))
Beispiel #8
0
 def testGetPart_empty(self):
     """Test empty partitioning"""
     ps = AlignedPartitionStrategy(1, 32768 * 1024, 0)
     self.assertEqual((0, 0), ps.getPart(0))
Beispiel #9
0
 def testGetPart_uneven(self):
     """Test unevenly divided partitioning"""
     ps = AlignedPartitionStrategy(3, 1024, 7000)
     self.assertEqual((0, 2048), ps.getPart(0))
     self.assertEqual((2048, 2048), ps.getPart(1))
     self.assertEqual((4096, 2904), ps.getPart(2))
Beispiel #10
0
 def testGetPart_mega(self):
     """Test megabyte partitioning"""
     ps = AlignedPartitionStrategy(1, 32768*1024, 1000000)
     self.assertEqual( (0, 1000000), ps.getPart(0) )
Beispiel #11
0
 def testGetPart_empty(self):
     """Test empty partitioning"""
     ps = AlignedPartitionStrategy(1, 32768*1024, 0)
     self.assertEqual( (0, 0), ps.getPart(0) )
Beispiel #12
0
 def testGetPart_uneven(self):
     """Test unevenly divided partitioning"""
     ps = AlignedPartitionStrategy(3, 1024, 7000)
     self.assertEqual( (0, 2048), ps.getPart(0) )
     self.assertEqual( (2048, 2048), ps.getPart(1) )
     self.assertEqual( (4096, 2904), ps.getPart(2) )