예제 #1
0
    def test_concurrent_update_and_checkpoint(self):
        mmsc = MinMaxSumCountAggregator()
        checkpoint_total = MinMaxSumCountAggregator._TYPE(2**32, 0, 0, 0)

        with concurrent.futures.ThreadPoolExecutor(max_workers=1) as ex:
            fut = ex.submit(self.call_update, mmsc)

            while not fut.done():
                mmsc.take_checkpoint()
                checkpoint_total = MinMaxSumCountAggregator._merge_checkpoint(
                    checkpoint_total, mmsc.checkpoint)

            mmsc.take_checkpoint()
            checkpoint_total = MinMaxSumCountAggregator._merge_checkpoint(
                checkpoint_total, mmsc.checkpoint)

            self.assertEqual(checkpoint_total, fut.result())
예제 #2
0
    def test_concurrent_update(self):
        mmsc = MinMaxSumCountAggregator()
        with concurrent.futures.ThreadPoolExecutor(max_workers=2) as ex:
            fut1 = ex.submit(self.call_update, mmsc)
            fut2 = ex.submit(self.call_update, mmsc)

            ret1 = fut1.result()
            ret2 = fut2.result()

            update_total = MinMaxSumCountAggregator._merge_checkpoint(
                ret1, ret2)
            mmsc.take_checkpoint()

            self.assertEqual(update_total, mmsc.checkpoint)
예제 #3
0
    def test_merge(self):
        mmsc1 = MinMaxSumCountAggregator()
        mmsc2 = MinMaxSumCountAggregator()

        checkpoint1 = MinMaxSumCountAggregator._TYPE(3, 150, 101, 3)
        checkpoint2 = MinMaxSumCountAggregator._TYPE(1, 33, 44, 2)

        mmsc1.checkpoint = checkpoint1
        mmsc2.checkpoint = checkpoint2

        mmsc1.merge(mmsc2)

        self.assertEqual(
            mmsc1.checkpoint,
            MinMaxSumCountAggregator._merge_checkpoint(checkpoint1,
                                                       checkpoint2),
        )